XQuery 文件使用特殊字符返回无效实体引用
XQuery file returning invalid entity reference using special characters
我在 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&l
和 pool & cue
。我还在发布的另一个问题中查看了修复完整的建议,但无法弄清楚它如何适合此查询。如果我删除了带有特殊字符的那些,它会按预期工作。
有什么想法吗?
根据问题评论中的附加信息,这不是代码执行的问题,而是代码部署的问题。
如果您使用 QConsole 或评估 XQuery 代码的其他一些方式插入代码,这种情况经常发生。 &
得到解释,并翻译成它代表的 &
字符。如果您随后将其写入某个模块数据库的 .xqy 文件,它不会再次转义回 &
,因为 XQuery 文件在 MarkLogic 中存储为纯文本,而 &
不会以纯文本形式转义。
部署代码的更好方法是从磁盘上传或插入。这样 XML 中的 &
、>
和 {
等字符将不会被解释,而是按原样保留和插入。有像 ml-gradle and Roxy that make deploying MarkLogic code very easy. Consider using these. Alternatively you could also look into using Curl against the Management REST api.
这样的工具
如果你毕竟想使用QConsole,转义像&
这样的字符两次。例如。 &
变为 &
,<
变为 &lt;
。
HTH!
我在 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&l
和 pool & cue
。我还在发布的另一个问题中查看了修复完整的建议,但无法弄清楚它如何适合此查询。如果我删除了带有特殊字符的那些,它会按预期工作。
有什么想法吗?
根据问题评论中的附加信息,这不是代码执行的问题,而是代码部署的问题。
如果您使用 QConsole 或评估 XQuery 代码的其他一些方式插入代码,这种情况经常发生。 &
得到解释,并翻译成它代表的 &
字符。如果您随后将其写入某个模块数据库的 .xqy 文件,它不会再次转义回 &
,因为 XQuery 文件在 MarkLogic 中存储为纯文本,而 &
不会以纯文本形式转义。
部署代码的更好方法是从磁盘上传或插入。这样 XML 中的 &
、>
和 {
等字符将不会被解释,而是按原样保留和插入。有像 ml-gradle and Roxy that make deploying MarkLogic code very easy. Consider using these. Alternatively you could also look into using Curl against the Management REST api.
如果你毕竟想使用QConsole,转义像&
这样的字符两次。例如。 &
变为 &amp;
,<
变为 &lt;
。
HTH!