共用方式為


XPath 集合

XPath 查詢傳回的集合會保留其所有定義的文件順序、階層和識別。換句話說,即是依文件順序傳回項目的集合,並且不含重複的項目。由於屬性依定義是沒有順序的,所以針對特定項目所傳回的屬性將沒有隱含順序。

含特定標籤名稱的所有項目集合,是使用標籤名稱本身來表示的。這可藉由使用句點和正斜線 (./) 來顯示項目是從目前內容中選取的來加以限定,但預設會使用目前內容,因此不必明確加註。

範例

運算式 代表意義

./first-name

所有 <first-name> 項目。請注意,這個運算式等同於接下來的運算式。

first-name

所有 <first-name> 項目。

索引至集合

XPath 運算式可輕鬆查詢一組節點中的特定節點。只要以方括弧括住索引序數即可。序數會從 1 開始 (第一個項目為數字 1)。

方括號字元 ([]) 的優先順序高於斜線字元 (///)。如需詳細資訊,請參閱運算子及特殊字元

範例

運算式 代表意義

author[1]

第一個 <author> 項目。

author[first-name][3]

具有 <first-name> 子項目的第三個 <author> 項目。

請注意,索引與要篩選的組集是相對的。請參考下列範例資料。

<x>
  <y/>
  <y/>
</x>
<x>
  <y/>
  <y/>
</x>

下表顯示如何選取特定的 <x><y> 項目。

運算式 代表意義

x/y[1]

每個 <x> 內部的第一個 <y>

(x/y)[1]

來自 <x> 項目之整組 <y> 項目的第一個 <y>

x[1]/y[1]

第一個 <x> 內部的第一個 <y>

上述的範例會簡單地參考到使用隱含預設值的 XPath 集合,例如 child:: 座標軸。對此座標軸而言,會以正向的文件順序對子節點的集合進行索引。

若為其他座標軸 (例如 ancestor::),請在 XPath 運算式中明確使用座標軸名稱。對此座標軸而言,會以反向的文件順序對上階的集合進行索引。請利用前一個表格來考量下列範例:

x/y[1]

這個運算式等同於:

x/child::y[1]

兩個運算式都會「針對每一個 <x> 項目,選取名為 <y>**的第一個子項目」。

以下範例都是使用相同的語法。

x/ancestor::y[1]

這個範例表示「針對每一個 <x> 項目,選取名為 <y> 的第一個上階項目 (以反向的文件順序)」。語法相同,但順序相反。

尋找集合中的最後一個項目

last() 函式會針對集合的最後一個項目傳回 True。請注意,last 相對於父節點。

範例

運算式 代表意義

book[last()]

最後一個 <book> 項目。

book/author[last()]

每一個 <book> 項目內部的最後一個 <author> 項目。

(book/author)[last()]

來自 <book> 項目之整組 <author> 項目的最後一個 <author> 項目。

群組

為求清楚起見,或是當一般優先順序不足以表示運算時,可使用括弧分組集合運算子。群組運算子可在任何篩選條件運算式 (述詞) 中使用,例如 author[(degree or award)and publication]。它們也能在頂層步驟運算式中使用,例如 (book|magazine)(author/degree | book/award)。但不能套用至低層步驟運算式。例如,author/(degree | award) 無效。

範例

運算式 代表意義

(book/author)

在目前內容節點中,做為任何 <book> 項目之子項目的所有 <author> 項目。

author[(degree or award) and publication]

至少包含一個 <degree><award> 項目和至少一個 <publication> 項目的所有 <author> 項目。

另請參閱

參考

XPath 範例

概念

XPath 的 XML 檔範例語法 (inventory.xml)