XPath 運算式是使用下列表格所顯示的運算子和特殊字元建構的。
依下列表格的指示來定義優先順序 (從最高優先順序到最低優先順序)。
路徑運算子
您可以使用路徑運算子 (/ and //) 來決定特定型別的項目集合。這些運算子會將其引數當做「左側」集合 (執行選取),並當做「右側」集合 (指示要選取的項目)。子系運算子 (/) 會從左側集合的立即子系中選取,子代運算子 (//) 則從左側集合的任意子代中選取。事實上,您可將 // 當做階層的一或多個層級之替代項。
請注意,執行查詢時,路徑運算子會變更內容。使用者可將路徑運算子字串放在一起,以周遊文件樹狀目錄。
範例
萬用字元
藉由替代萬用字元 ( * )集合,即可參考項目而不需使用項目的名稱。不論標籤名稱為何, * 集合都會參考目前內容子系的所有項目。
範例
請注意,系統不支援模式 *:book 。
屬性
XPath 以 @ 符號表示屬性名稱。系統會平等看待屬性和子項目,並且平等處理兩個類型之間的功能 (可能的話)。
屬性不含子項目,所以將路徑運算子套用到屬性時,就會發生語法錯誤。此外,您無法將索引套用到屬性,因為依照定義,不會定義屬性的順序。
範例
請注意,下列範例是無效的,因為屬性不能有任何子系:price/@exchange/total
尋找多個屬性
您可以使用 @* 傳回項目的所有屬性。這對於將屬性看做記錄欄位的應用程式很有用
範例
請注意,系統不支援模式 @*:title 。
篩選條件子句
藉由將篩選條件子句 [pattern] 新增至集合,可將限制和分支套用至任何集合。篩選條件類似於 SQL WHERE 子句。篩選條件內含模式,稱為「篩選條件模式」。會將篩選條件模式評估為布林值,並且會針對集合的每個項目進行測試。結果集合將略過無法通過篩選條件模式測試的集合之任何項目。
為了方便起見,若將集合放在篩選條件內部,則當集合包含任何成員時,就會產生布林 TRUE;若集合為空,則產生 FALSE。如果存在含子項目 的 項目,運算式 (例如 author/degree) 就會隱含執行評估為 TRUE 的「集合至布林值」轉換函式。
請注意,運算式的指定層級可出現任意數量的篩選條件。不允許空的篩選條件。
系統必定會根據內容評估篩選條件。換言之,運算式 book[author] 會測試每個找到的 項目是否有 子項目。同樣地,book[author = 'Bob'] 會測試每個找到的 項目是否具有值 Bob 的 子項目。使用句點 (.) 字元也可以檢查內容的值。例如,book[. = 'Trenton'] 會測試在目前內容中找到的每本書籍值是否為 Trenton。
範例
/ | 子運算子;選取左側集合的子系。當這個路徑運算子出現在模式開頭時,就表示應該從根節點選取子系。 |
// | 遞迴下降;搜尋任何深度的指定項目。當這個路徑運算子出現在模式開頭時,就表示從根節點遞迴下降。 |
. | 指示目前內容。 |
.. | 目前內容節點的父代。 |
* | 萬用字元;選取所有項目,不論項目名稱為何。 |
@ | 屬性;屬性名稱的前置詞。 |
@* | 屬性萬用字元;選取所有屬性,不管名稱為何。 |
: | 命名空間分隔符號;分隔命名空間前置詞與項目或屬性名稱。 |
() | 用來明確建立優先順序的群組運算。 |
[] | 套用篩選條件模式。 |
[] | 註標運算子;做為集合內的索引。 |
+ | 執行加法。 |
- | 執行減法。 |
div | 根據IEEE754執行浮點數除法。 |
* | 執行乘法。 |
mod | 傳回捨去除法的餘數。 |
依下列表格的指示來定義優先順序 (從最高優先順序到最低優先順序)。
優先順序 | 字元 | 內容 |
---|---|---|
1 | () | 群組 |
2 | [] | 篩選常式 |
3 | /// | 路徑運算 |
路徑運算子
您可以使用路徑運算子 (/ and //) 來決定特定型別的項目集合。這些運算子會將其引數當做「左側」集合 (執行選取),並當做「右側」集合 (指示要選取的項目)。子系運算子 (/) 會從左側集合的立即子系中選取,子代運算子 (//) 則從左側集合的任意子代中選取。事實上,您可將 // 當做階層的一或多個層級之替代項。
請注意,執行查詢時,路徑運算子會變更內容。使用者可將路徑運算子字串放在一起,以周遊文件樹狀目錄。
範例
運算式 | 表示 |
---|---|
author/first-name | 目前內容節點的<author>項目內部的所有<first-name>項目。 |
bookstore//title | 位於<bookstore>項目一或多層深的所有<title>項目(任意子代)。請注意,其不同於下列模式bookstore/*/title。 |
bookstore/*/title | 所有當做<bookstore>項目孫代的<title>項目。 |
bookstore//book/excerpt//emph | 位於<book>項目的<excerpt>子系之任何位置,以及<bookstore>項目的任何位置之所有<emph>項目: |
.//title | 位於目前內容中一或多層深的所有<title>項目。請注意,唯有在此情況下,才需要使用句點標記法。 |
萬用字元
藉由替代萬用字元 ( * )集合,即可參考項目而不需使用項目的名稱。不論標籤名稱為何, * 集合都會參考目前內容子系的所有項目。
範例
運算式 | 表示 |
---|---|
author/* | <author> 項目的所有項目子系。 |
book/*/last-name | 所有當做 <book> 項目孫代的 <last-name> 項目。 |
*/* | 目前內容的所有孫代項目。 |
my:book | my 命名空間的 <book> 項目。 |
my:* | my 命名空間的所有項目。 |
請注意,系統不支援模式 *:book 。
屬性
XPath 以 @ 符號表示屬性名稱。系統會平等看待屬性和子項目,並且平等處理兩個類型之間的功能 (可能的話)。
屬性不含子項目,所以將路徑運算子套用到屬性時,就會發生語法錯誤。此外,您無法將索引套用到屬性,因為依照定義,不會定義屬性的順序。
範例
運算式 | 表示 |
---|---|
@style | 目前項目內容的 style 屬性。 |
price/@exchange | 目前內容內部的 <price> 項目之 exchange 屬性。 |
book/@style | 所有 <book> 項目的 style 屬性。 |
請注意,下列範例是無效的,因為屬性不能有任何子系:price/@exchange/total
尋找多個屬性
您可以使用 @* 傳回項目的所有屬性。這對於將屬性看做記錄欄位的應用程式很有用
範例
運算式 | 表示 |
---|---|
@* | 目前內容節點的所有屬性。 |
@my:* | my 命名空間的所有屬性。其不含 my 命名空間項目的不合格屬性。 |
請注意,系統不支援模式 @*:title 。
篩選條件子句
藉由將篩選條件子句 [pattern] 新增至集合,可將限制和分支套用至任何集合。篩選條件類似於 SQL WHERE 子句。篩選條件內含模式,稱為「篩選條件模式」。會將篩選條件模式評估為布林值,並且會針對集合的每個項目進行測試。結果集合將略過無法通過篩選條件模式測試的集合之任何項目。
為了方便起見,若將集合放在篩選條件內部,則當集合包含任何成員時,就會產生布林 TRUE;若集合為空,則產生 FALSE。如果存在含子項目
請注意,運算式的指定層級可出現任意數量的篩選條件。不允許空的篩選條件。
系統必定會根據內容評估篩選條件。換言之,運算式 book[author] 會測試每個找到的
範例
運算式 | 表示 |
---|---|
book[excerpt] | 至少包含一個 <excerpt> 項目的所有 <book> 項目。 |
book[excerpt]/title | 至少包含一個 <excerpt> 項目的 <book> 項目內部的所有 <title> 項目。 |
book[excerpt]/author[degree] | 至少包含一個 <degree> 項目,並且位於 <book> 項目(至少包含一個 <excerpt> 項目)內部的所有 <author> 項目。 |
book[author/degree] | 至少包含一個 <author> 項目(內含至少一個 <degree> 子項目)的所有 <book> 項目。 |
book[excerpt][title] | 至少包含一個 <excerpt> 項目和至少一個 <title> 項目的所有 <book> 項目。 |