You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过HTTP向BaseX数据库发送XQuery查询?

BaseX HTTP接口执行XQuery的正确方式

针对你遇到的问题,以下是几种通过HTTP接口向BaseX提交XQuery查询的有效方法,附带错误原因说明:

前提准备

确保BaseX HTTP服务已在端口123启动,且请求携带正确的用户认证(用-u test:test指定用户名密码)。


方法1:POST提交表单数据(推荐,无需编码)

直接用POST请求将XQuery作为表单参数query发送,无需处理URL编码或XML转义(Windows环境注意引号转义):

curl -u test:test -X POST http://localhost:123/rest -d "query=xquery for $e in doc('music')/musicCollection/entry where $e/Type = \"LP\" return <entry> {$e/Type} {$e/Name} {$e/Artist} </entry>"

方法2:GET请求传query参数(适合短查询)

将XQuery进行URL编码后作为query参数附加到URL末尾:

curl -u test:test "http://localhost:123/rest?query=xquery%20for%20%24e%20in%20doc%28%27music%27%29%2FmusicCollection%2Fentry%20where%20%24e%2FType%20%3D%20%22LP%22%20return%20%3Centry%3E%20%7B%24e%2FType%7D%20%7B%24e%2FName%7D%20%7B%24e%2FArtist%7D%20%3C%2Fentry%3E"

注:可以用在线URL工具或curl的--data-urlencode自动处理编码,避免手动转义出错。

方法3:XML格式POST请求(需正确嵌套结构)

如果要发送XML格式的请求,必须用<query>+<text>+CDATA的结构包裹XQuery,同时设置Content-Type: application/xml,防止XQuery中的XML标签被解析破坏:

curl -u test:test -X POST http://localhost:123/rest -H "Content-Type: application/xml" -d "<query><text><![CDATA[xquery for $e in doc('music')/musicCollection/entry where $e/Type = \"LP\" return <entry> {$e/Type} {$e/Name} {$e/Artist} </entry>]]></text></query>"

你之前的错误原因解析

  1. "content is illegal in prolog":直接发送原始XQuery文本,BaseX HTTP接口默认按XML格式解析请求,XQuery开头的xquery字符不属于XML声明或根元素,触发XML解析错误。
  2. "Empty query":仅使用<query>标签但未在内部添加有效查询内容,或内容被XML解析规则过滤(比如未用<text>包裹)。
  3. "Expecting return value":嵌套<text>但未用CDATA包裹XQuery,导致XQuery中的<entry>等标签被当作XML节点解析,实际传递给BaseX的查询内容不完整,出现语法错误。

内容的提问来源于stack exchange,提问作者MartinK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 12:16:25