[英]Difference between XPath & XQuery when selecting attribute value
XPath 和 XQuery 選擇屬性的方式似乎有所不同。 這是從 W3Schools 竊取的玩具示例:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="children">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
我想檢索lang
屬性的值。 所以,我天真地這樣做: //title/@lang
完美地工作......在 XPath 評估器上而不是在 XQuery 評估器上。
我需要知道的是:我應該如何編寫 XPath 表達式以在 XQuery 評估器上工作?
我想知道的是:這是怎么回事?!
這是 TL 部分:
我在一個沒有這些功能的遺留平台上,所以我將 XML 和我的查詢表達式發送到一個外部服務,我認為這是一個基於 Saxon 的 XQuery 評估器。 我的語法在CodeBeautify 的 XPath Tester上按預期工作。
我還在xpathtester.com上驗證了這種差異:它在 XPath 模式下按預期工作,但在 XQuery 模式下不工作。 (注意:鏈接未加密。)。
xpathtester.com 返回以下錯誤消息: ERROR - Cannot create an attribute node (lang) whose parent is a document node
表達式//title/@lang
在XPath 和XQuery 下都有效,並返回兩個屬性節點的序列。
您看到的不同之處在於不同的 XPath 和 XQuery 客戶端如何處理由兩個屬性節點組成的結果。
如果該工具嘗試將結果序列化為 XML,它將失敗,因為 XML 序列化嘗試構造文檔節點並將屬性附加到文檔。
因此,您需要查看您的 XPath 或 XQuery 工具為顯示結果提供了哪些選項。
在真正了解@Martin Honnen 和@Aaron 所談論的內容並深入了解教程之后,我想我已經提出了一個令我滿意的解決方案:
string-join((for $l in //title/@lang return string($l)) , ',')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.