2017-04-07 79 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