问题描述
我正在尝试将baseX REST API与python的请求发布方法一起使用,使用保存的.xq文件,其中包含带有&
的查询。
直接在baseX上运行此保存的查询时,没有问题。
响应中显示的请求也按原样包含&
,而不包含&
,但是我仍然遇到以下错误(响应代码为400):
“停止在C:/程序文件(x86)/ BaseX / webapp,37/37:\ n [XPST0003]无效的实体:“ &&”,“ ||”,“!”)))...” 。” “
请求正文的相关部分是:
<rest:query xmlns:rest="http://basex.org/rest"> <rest:text>declare function local:enrich_node($attr,$supertype) {
$attr,attribute {"supertype"} {$supertype}
};
declare function local:enrich($n as node()) as node() {
typeswitch($n)
...
case $e as element(operator)
return
...
else if ($e/text()=("&&","||","!")) then
element {name($e)}
{local:enrich_node($e/@*,"boolop"),for $c in $e/(* | text())
return local:enrich($c) }
else
...
};
declare variable $assign_id as xs:string external;
declare variable $submission_id as xs:string external;
for $node in db:open($assign_id,$submission_id)
return local:enrich($node)</rest:text><variable name="assign_id" value="val1"/><variable name="submission_id" value="val2"/></rest:query>
我尝试查找相关问题,但未找到任何内容,然后建议我尝试使用另一个&
“转义”它,但是返回的错误是4 &
s 。
有什么想法吗?
解决方法
由于必须rest:text
的内容作为XQuery代码进行评估,但不应将其解析为XML,因此应有助于将XQuery代码包装在CDATA部分的rest:text
中。