簡體   English   中英

選擇屬性值時 XPath 和 XQuery 的區別

[英]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)) , ',')

https://xqueryfiddle.liberty-development.net/3Nzd8bR/2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM