XQuery 文件使用特殊字符返回无效的实体引用



我在 MarkLogic XQuery 文件中有以下查询,并且看到返回以下错误消息

XDMP-ENTITYREF: (err:XPST0003) Invalid entity reference " " . See the MarkLogic server error log for further detail.

以下是我在 XQuery 文件中使用的代码。

xquery version "1.0-ml";
declare variable $query := 
cts:or-query
((
cts:element-word-query(xs:QName("lines"),"l&l"),
cts:element-word-query(xs:QName("lines"),"pool & cue"),
cts:element-word-query(xs:QName("lines"),"look")
));
declare function local:do-query(){
element xml {
for $i in cts:uris( (), (), $query)
let $item := doc($i)
return
element item {
element title { $item/title/string() }
}
}
};
local:do-query()

显然,我正在寻找的 2x 标签是l&lpool & cue.我还在发布的另一个问题中查看了完全修复建议,但无法弄清楚它如何适合此查询。如果我删除了带有特殊字符的那些,它会按预期工作。

有什么想法吗?

根据问题注释中的附加信息,这不是代码执行的问题,而是代码部署的问题。

如果使用 QConsole 或评估 XQuery 代码的其他方式插入代码,则经常发生这种情况。&被解释,并翻译成它所代表的&字符。如果随后将其写入某个模块数据库的 .xqy 文件中,它不会再次转义回&,因为 XQuery 文件以纯文本形式存储在 MarkLogic 中,而&不会以纯文本形式转义。

部署代码的更好方法是从磁盘上传或插入。这样,XML 中的&>{等字符就不会被解释,而是按原样保留和插入。有像ml-gradle和Roxy这样的工具,使部署MarkLogic代码变得非常容易。考虑使用这些。或者,您也可以考虑对管理 REST API 使用 Curl。

毕竟,如果您想使用QConsole,请转义像&两次这样的字符。 例如&变得&amp;amp;<变得&amp;lt;

哼!

最新更新