XPath 集合
XPath 查詢傳回的集合會保留其所有定義的文件順序、階層和識別。換句話說,即是依文件順序傳回項目的集合,並且不含重複的項目。由於屬性依定義是沒有順序的,所以針對特定項目所傳回的屬性將沒有隱含順序。
含特定標籤名稱的所有項目集合,是使用標籤名稱本身來表示的。這可藉由使用句點和正斜線 (./
) 來顯示項目是從目前內容中選取的來加以限定,但預設會使用目前內容,因此不必明確加註。
範例
運算式 | 代表意義 |
---|---|
|
所有 |
|
所有 |
索引至集合
XPath 運算式可輕鬆查詢一組節點中的特定節點。只要以方括弧括住索引序數即可。序數會從 1 開始 (第一個項目為數字 1)。
方括號字元 ([]
) 的優先順序高於斜線字元 (/
和 //
)。如需詳細資訊,請參閱運算子及特殊字元。
範例
運算式 | 代表意義 |
---|---|
|
第一個 |
|
具有 |
請注意,索引與要篩選的組集是相對的。請參考下列範例資料。
<x>
<y/>
<y/>
</x>
<x>
<y/>
<y/>
</x>
下表顯示如何選取特定的 <x>
和 <y>
項目。
運算式 | 代表意義 |
---|---|
|
每個 |
|
來自 |
|
第一個 |
上述的範例會簡單地參考到使用隱含預設值的 XPath 集合,例如 child::
座標軸。對此座標軸而言,會以正向的文件順序對子節點的集合進行索引。
若為其他座標軸 (例如 ancestor::
),請在 XPath 運算式中明確使用座標軸名稱。對此座標軸而言,會以反向的文件順序對上階的集合進行索引。請利用前一個表格來考量下列範例:
x/y[1]
這個運算式等同於:
x/child::y[1]
兩個運算式都會「針對每一個 <x>
項目,選取名為 <y>
**的第一個子項目」。
以下範例都是使用相同的語法。
x/ancestor::y[1]
這個範例表示「針對每一個 <x>
項目,選取名為 <y>
的第一個上階項目 (以反向的文件順序)」。語法相同,但順序相反。
尋找集合中的最後一個項目
last() 函式會針對集合的最後一個項目傳回 True。請注意,last
相對於父節點。
範例
運算式 | 代表意義 |
---|---|
|
最後一個 |
|
每一個 |
|
來自 |
群組
為求清楚起見,或是當一般優先順序不足以表示運算時,可使用括弧分組集合運算子。群組運算子可在任何篩選條件運算式 (述詞) 中使用,例如 author[(degree or award)and publication]
。它們也能在頂層步驟運算式中使用,例如 (book|magazine)
或 (author/degree | book/award)
。但不能套用至低層步驟運算式。例如,author/(degree | award)
無效。
範例
運算式 | 代表意義 |
---|---|
|
在目前內容節點中,做為任何 |
|
至少包含一個 |