无法使用带有“&”的Xquery查询baseX

问题描述

我正在尝试将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()=("&amp;&amp;","||","!")) 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>

当我从查询删除&amp;&amp;部分时,它会起作用。

我尝试查找相关问题,但未找到任何内容,然后建议我尝试使用另一个&amp;“转义”它,但是返回的错误是4 & s 。 有什么想法吗?

解决方法

由于必须rest:text的内容作为XQuery代码进行评估,但不应将其解析为XML,因此应有助于将XQuery代码包装在CDATA部分的rest:text中。