2017-04-07 15 views
0

返回无效实体引用我有一个MarkLogic的XQuery文件下面的查询,我看到下面的错误信息返回的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。我还在另一个问题上研究了修复完整的建议,但无法弄清楚这是如何适合这个查询的。如果我删除了带有特殊字符的字符,它会按预期工作。

任何想法?

+0

此代码在QConsole中运行得很好,因此可能存在不同的问题。你如何调用代码,你确定你正在调用上面的代码而不是其他东西?它可能是一个数据问题呢? – grtjn

+0

是的代码在qconsole中同意运行良好,但是当将所述代码上传到.xqy文件并尝试在浏览器中运行它时,它就在那里返回错误消息。预期的行为是通过控制台查看xml结果。 – Key

+0

您是如何上传.xqy文件的,您是否使用模块数据库上的QConsole Explore功能来检查曾加载到数据库中的.xqy文件是否正确? – grtjn

回答

1

根据对问题的评论中的其他信息,这不是执行代码的问题,而是代码的部署。

如果您使用QConsole插入代码或者您评估XQuery代码的其他方式,通常会发生这种情况。该&得到解释,并翻译为它代表的&字符。如果您将该文件写入某个模块数据库的.xqy文件中,它将不会再次跳转回&,因为XQuery文件在纯文本中以纯文本形式存储,并且&不以纯文本格式转义。

更好的部署代码的方法是从磁盘上传或插入。这样,XML内部的字符如&,>{将不会被解释,而是保留并按原样插入。有像ml-gradleRoxy这样的工具可以非常容易地部署MarkLogic代码。考虑使用这些。或者,您也可以考虑使用Curl对Management REST api

如果您想要使用QConsole,转义字符如&两次。例如。 &变成&amp;amp;,并且<变成&amp;lt;

HTH!

+0

感谢您的帮助 – Key