共用方式為


運算子與特殊字元

XPath 運算式是使用下列表格所顯示的運算子和特殊字元建構的。

/

子運算子;選取左側集合的立即子系。當這個路徑運算子出現在模式開頭時,就表示應該從根節點選取子系。

//

遞迴下降;搜尋任何深度的指定項目。當這個路徑運算子出現在模式開頭時,就表示從根節點遞迴下降。

.

指示目前內容。

..

目前內容節點的父代。

*

萬用字元;選取所有項目,不論項目名稱為何。

@

屬性;屬性名稱的前置詞。

@*

屬性萬用字元;選取所有屬性,不管名稱為何。

:

命名空間分隔符號;分隔命名空間前置詞與項目或屬性名稱。

( )

用來明確建立優先順序的群組運算。

[ ]

套用篩選條件模式。

[ ]

註標運算子;做為集合內的索引。

+

執行加法。

-

執行減法。

div

根據 IEEE 754 執行浮點數除法。

*

執行乘法。

mod

傳回捨去除法的餘數。

這個表格不含布林值和設定運算子,它們是列示在布林值、比較及集合運算式設定運算中。

依下列表格的指示來定義優先順序 (從最高優先順序到最低優先順序)。

優先順序 字元 用途

1

( )

群組

2

[ ]

篩選條件

3

/ //

路徑運算

群組運算子 () 只能在頂層路徑運算式上使用。例如,(//author/degree | //author/name) 是有效的群組運算子,但 //author/(degree | name) 則不是。

篩選條件模式運算子 ([]) 的優先順序高於路徑運算子 (///)。例如,運算式 //comment()[3] 會選取索引等於 3 (相對於文件中任何位置的註解父代) 的所有註解。其不同於運算式 (//comment())[3],因為後者會從相對於父代的所有註解集內選取第三個註解。第一個運算式可傳回多個註解,而後面的運算式則只能傳回一個註解。

這整份參考手冊都會詳細說明這些運算子和特殊字元。

路徑運算子

您可以使用路徑運算子 (///) 來決定特定型別的項目集合。這些運算子會將其引數當做「左側」集合 (執行選取) 及「右側」集合 (指示要選取的項目)。子系運算子 (/) 會從左側集合的立即子系中選取,子代運算子 (//) 則從左側集合的任意子代中選取。事實上,您可將 // 當做階層的一或多個層級之替代項。

請注意,執行查詢時,路徑運算子會變更內容。使用者可透過將路徑運算子字串放在一起,以周遊文件樹狀目錄。

範例

運算式 代表意義

author/first-name

目前內容節點之 <author> 項目內部的所有 <first-name> 項目。

bookstore//title

位於 <bookstore> 項目一或多層深的所有 <title> 項目 (任意子代)。請注意,其不同於下列模式 bookstore/*/title

bookstore/*/title

當做 <bookstore> 項目子系的所有 <title> 項目。

bookstore//book/excerpt//emph

所有 <emph> 項目,其位於 <book> 項目的 <excerpt> 子系之任何位置,以及 <bookstore> 項目的任何位置:

.//title

位於目前內容中一或多層深的所有 <title> 項目。請注意,唯有在此情況下,才需要使用句點標記法。

萬用字元

藉由替代萬用字元 (*) 集合,即可參考項目而不需使用項目的名稱。不論標籤名稱為何,* 集合都會參考目前內容子系的所有項目。

範例

運算式 代表意義

author/*

<author> 項目的所有項目子系。

book/*/last-name

當做 <book> 項目子系的所有 <last–name> 項目。

*/*

目前內容的所有孫代項目。

my:book

my 命名空間的 <book> 項目。

my:*

my 命名空間的所有項目。

請注意,系統不支援模式 *:book

屬性

XPath 會以 @ 符號表示屬性名稱。系統會平等看待屬性和項目子系,而且這兩個型別之間的功能是相等的 (若條件相當)。

ms256122.note(zh-tw,VS.100).gif注意:
屬性不含項目子系,所以將路徑運算子套用到屬性時,就會發生語法錯誤。此外,您無法將索引套用到屬性,因為依照定義,不會定義屬性的順序。

範例

運算式 代表意義

@style

目前項目內容的最後一個 style 屬性。

price/@exchange

目前內容中 <price> 項目的 exchange 屬性。

book/@style

所有 <book> 項目的 style 屬性。

請注意,下列範例是無效的,因為屬性不能有任何子系。

price/@exchange/total

尋找多個屬性

您可以使用 @* 傳回項目的所有屬性。這對於會將屬性視為記錄欄位的應用程式很有用。

範例

運算式 代表意義

@*

目前內容節點的所有屬性。

@my:*

my 命名空間的所有屬性。其不含 my 命名空間項目的不合格屬性。

請注意,系統不支援模式 @*:title

另請參閱

參考

XPath 範例

概念

設定作業
XPath 的 XML 檔範例語法 (inventory.xml)