簡體   English   中英

xQuery如何在路徑表達式中使用變量

[英]xQuery how to use variables in the path expression

我有一個XML文檔:

<resultsets>
    <row>
        <emp_no>10001</emp_no>
        <first_name>Georgi</first_name>
        <last_name>Facello</last_name>
    </row>
    <row>
        <emp_no>10007</emp_no>
        <first_name>Bezalel</first_name>
        <last_name>Simmel</last_name>
    </row>
</resoutsets>

我有一個變量查詢emp_no字段定義為:

let $emp_no := doc("employees.xml")//emp_no

我想在查詢中使用$ emp_no節點名稱(emp_no)執行相同的操作,例如:

doc("employees.xml")//$emp_no/name()

表達式左側的路徑中是否可能包含變量?

是的,您可以在XPath表達式中使用變量。 但是不清楚您要問或試圖實現什么。

如果要選擇與分配給$emp_no變量的元素具有相同name()的元素,則可以匹配任何元素,然后使用謂詞過濾器測試name()是否等於以下任意一個$emp_no的元素序列中的name()值:

doc("employees.xml")//*[name() = $emp_no/name()]

但是,這只會返回已經分配給$emp_no元素的相同emp_no元素。

表達式左側的路徑中是否可能包含變量?

這里的關鍵點是用變量引用替換路徑中的名稱在語法上是合法的,但這並不意味着您可能認為這意味着什么。 如果變量$ X的值為“ orders”,則

//customer/$X

不代表

//customer/orders

相反,這意味着

//customer/"orders"

它為文檔中的每個客戶元素返回一次出現的字符串“ orders”。

如果要查找名稱等於字符串$ X的元素,請使用

//customer/*[name()=$X]

除非涉及名稱空間,否則您需要同時比較名稱空間URI和本地名稱。

暫無
暫無

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

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