在位置路徑 (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 是節點測試 (TRUE 如果 Customer 是 <元素節點>,這是因為 <元素> 是 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 是節點測試 (TRUE 如果 Customer 是 <元素> 節點,這是因為 <元素> 是 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 是節點測試 (TRUE 如果 Customer 是 <元素> 節點)。not(child::ContactName) 是述詞。在述詞中,child 是軸而且 ContactName 是節點測試 (TRUE 如果 ContactName 是 <元素> 節點)。

使用縮寫語法,XPath 查詢也可以指定為:

Customer[not(ContactName)]

選取述詞:範例 5

下列 XPath 運算式從目前內容節點選取所有具有 CustomerID 屬性的 <Customer> 子系:

child::Customer[attribute::CustomerID]

在這個範例中,child 是軸而且 Customer 是節點測試 (TRUE 如果 Customer 是 <元素> 節點)。attribute::CustomerID 是述詞。在述詞中,attribute 是軸而且 CustomerID 是述詞 (TRUE 如果 CustomerID 是 <屬性> 節點)。

使用縮寫語法,XPath 查詢也可以指定為:

Customer[@CustomerID]

選取述詞:範例 6

Microsoft SQLXML 4.0 支援在述詞中包含交叉乘積的 XPath 查詢,如下列範例所示:

Customer[Order/@OrderDate=Order/@ShipDate]

這個查詢會選取所有客戶,其方式是使用任何 Order,其中 OrderDate 要等於任何 Order 的 ShipDate。