在位置路徑 (SQLXML 4.0) 中指定選取述詞
述詞會篩選與軸有關的節點集 (與 SELECT 陳述式中的 WHERE 子句相似), 並指定在方括號之間。 對於節點集內要篩選的每一個節點,該節點會當做內容節點,而且節點集內的節點數目會當做內容大小,然後評估述詞運算式。 如果述詞運算式評估該節點為 TRUE,則產生的節點集會包含該節點。
XPath 也允許以位置為基礎的篩選。 評估為數字的述詞運算式會選取該序數節點。 例如,位置路徑 Customer[3] 會傳回第三客戶。 但是不支援這類數值述詞, 只支援傳回布林值的述詞運算式。
[!附註]
如需有關這個 XPath 實作的限制,和它與 W3C 規格之間的不同處,請參閱<使用 XPath 查詢的簡介 (SQLXML 4.0)>。
選取述詞:範例 1
下列 XPath 運算式 (位置路徑) 從目前內容節點選取所有具有 CustomerID 屬性 (其值為 ALFKI) 的 <Customer> 元素子系:
/child::Customer[attribute::CustomerID="ALFKI"]
在這個 XPath 查詢中,child 和 attribute 是軸的名稱。 Customer 是節點測試 (如果 Customer 是 <元素節點>,則為 TRUE,這是因為 <元素> 是 child 軸的主要節點類型)。 attribute::CustomerID="ALFKI" 是述詞。 在述詞中,attribute 是軸而且 CustomerID 是節點測試 (TRUE 如果 CustomerID 是內容節點的屬性,這是因為 <屬性> 是 attribute 軸的主要節點類型)。
使用縮寫語法,XPath 查詢也可以指定為:
/Customer[@CustomerID="ALFKI"]
選取述詞:範例 2
下列 XPath 運算式 (位置路徑) 從目前內容節點選取所有具有 SalesOrderID 屬性 (其值為 1) 的 <Order> 孫系:
/child::Customer/child::Order[attribute::SalesOrderID="1"]
在這個 XPath 運算式中,child 和 attribute 是軸的名稱。 Customer、Order 和 SalesOrderID 是節點測試。 attribute::OrderID="1" 是述詞。
使用縮寫語法,XPath 查詢也可以指定為:
/Customer/Order[@SalesOrderID="1"]
選取述詞:範例 3
下列 XPath 運算式 (位置路徑) 從目前內容節點選取所有具有一個或多個 <ContactName> 子系的 <Customer> 子系:
child::Customer[child::ContactName]
這個範本假設在 XML 文件中 <ContactName> 是 <Customer> 元素的子元素,而且在註解的 XSD 結構描述中稱為「元素中心對應」(element-centric mapping)。
在這個 XPath 運算式中,child 是軸的名稱。 Customer 是節點測試 (如果 Customer 是 <元素> 節點,則為 TRUE,這是因為 <元素> 是 child 軸的主要節點類型)。 child::ContactName 是述詞。 在述詞中,child 是軸而且 ContactName 是節點測試 (TRUE 如果 ContactName 是 <元素> 節點)。
這個運算式只會傳回具有 <ContactName> 元素子系的內容節點之 <Customer> 元素子系。
使用縮寫語法,XPath 查詢也可以指定為:
Customer[ContactName]
選取述詞:範例 4
下列 XPath 運算式選取不具有 <ContactName> 元素子系的內容節點之 <Customer> 元素子系:
child::Customer[not(child::ContactName)]
這個範本假設在 XML 文件中 <ContactName> 是 <Customer> 元素的子元素,而且在資料庫中 ContactName 欄位是不需要的。
在此範例中,child 為軸。 Customer 為節點測試 (如果 Customer 是 <元素> 節點,則為 TRUE)。 not(child::ContactName) 是述詞。 在述詞中,child 是軸而且 ContactName 是節點測試 (TRUE 如果 ContactName 是 <元素> 節點)。
使用縮寫語法,XPath 查詢也可以指定為:
Customer[not(ContactName)]
選取述詞:範例 5
下列 XPath 運算式從目前內容節點選取所有具有 CustomerID 屬性的 <Customer> 子系:
child::Customer[attribute::CustomerID]
在這個範例中,child 是軸而且 Customer 是節點測試 (如果 Customer 是 <元素> 節點,則為 TRUE )。 attribute::CustomerID 是述詞。 在述詞中,attribute 是軸而且 CustomerID 是述詞 (TRUE 如果 CustomerID 是 <屬性> 節點)。
使用縮寫語法,XPath 查詢也可以指定為:
Customer[@CustomerID]
選取述詞:範例 6
Microsoft SQLXML 4.0 支援在述詞中包含交叉乘積的 XPath 查詢,如下列範例所示:
Customer[Order/@OrderDate=Order/@ShipDate]
這個查詢會選取所有客戶,其方式是使用任何 Order,其中 OrderDate 要等於任何 Order 的 ShipDate。