[英]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.