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> 項目。 |