運算子與特殊字元
XPath 運算式是使用下列表格所顯示的運算子和特殊字元建構的。
|
子運算子;選取左側集合的立即子系。當這個路徑運算子出現在模式開頭時,就表示應該從根節點選取子系。 |
|
遞迴下降;搜尋任何深度的指定項目。當這個路徑運算子出現在模式開頭時,就表示從根節點遞迴下降。 |
|
指示目前內容。 |
|
目前內容節點的父代。 |
|
萬用字元;選取所有項目,不論項目名稱為何。 |
|
屬性;屬性名稱的前置詞。 |
|
屬性萬用字元;選取所有屬性,不管名稱為何。 |
|
命名空間分隔符號;分隔命名空間前置詞與項目或屬性名稱。 |
|
用來明確建立優先順序的群組運算。 |
|
套用篩選條件模式。 |
|
註標運算子;做為集合內的索引。 |
|
執行加法。 |
|
執行減法。 |
|
根據 IEEE 754 執行浮點數除法。 |
|
執行乘法。 |
|
傳回捨去除法的餘數。 |
這個表格不含布林值和設定運算子,它們是列示在布林值、比較及集合運算式或設定運算中。
依下列表格的指示來定義優先順序 (從最高優先順序到最低優先順序)。
優先順序 | 字元 | 用途 |
---|---|---|
1 |
|
群組 |
2 |
|
篩選條件 |
3 |
|
路徑運算 |
群組運算子 ()
只能在頂層路徑運算式上使用。例如,(//author/degree | //author/name)
是有效的群組運算子,但 //author/(degree | name)
則不是。
篩選條件模式運算子 ([]
) 的優先順序高於路徑運算子 (/
和 //
)。例如,運算式 //comment()[3]
會選取索引等於 3 (相對於文件中任何位置的註解父代) 的所有註解。其不同於運算式 (//comment())[3]
,因為後者會從相對於父代的所有註解集內選取第三個註解。第一個運算式可傳回多個註解,而後面的運算式則只能傳回一個註解。
這整份參考手冊都會詳細說明這些運算子和特殊字元。
路徑運算子
您可以使用路徑運算子 (/
和 //
) 來決定特定型別的項目集合。這些運算子會將其引數當做「左側」集合 (執行選取) 及「右側」集合 (指示要選取的項目)。子系運算子 (/
) 會從左側集合的立即子系中選取,子代運算子 (//
) 則從左側集合的任意子代中選取。事實上,您可將 //
當做階層的一或多個層級之替代項。
請注意,執行查詢時,路徑運算子會變更內容。使用者可透過將路徑運算子字串放在一起,以周遊文件樹狀目錄。
範例
運算式 | 代表意義 |
---|---|
|
目前內容節點之 |
|
位於 |
|
當做 |
|
所有 |
|
位於目前內容中一或多層深的所有 |
萬用字元
藉由替代萬用字元 (*
) 集合,即可參考項目而不需使用項目的名稱。不論標籤名稱為何,*
集合都會參考目前內容子系的所有項目。
範例
運算式 | 代表意義 |
---|---|
|
|
|
當做 |
|
目前內容的所有孫代項目。 |
|
|
|
|
請注意,系統不支援模式 *:book
。
屬性
XPath 會以 @
符號表示屬性名稱。系統會平等看待屬性和項目子系,而且這兩個型別之間的功能是相等的 (若條件相當)。
![]() |
---|
屬性不含項目子系,所以將路徑運算子套用到屬性時,就會發生語法錯誤。此外,您無法將索引套用到屬性,因為依照定義,不會定義屬性的順序。 |
範例
運算式 | 代表意義 |
---|---|
|
目前項目內容的最後一個 |
|
目前內容中 |
|
所有 |
請注意,下列範例是無效的,因為屬性不能有任何子系。
price/@exchange/total
尋找多個屬性
您可以使用 @*
傳回項目的所有屬性。這對於會將屬性視為記錄欄位的應用程式很有用。
範例
運算式 | 代表意義 |
---|---|
|
目前內容節點的所有屬性。 |
|
|
請注意,系統不支援模式 @*:title
。