XPath コレクション
XPath クエリで返されるコレクションは、定義されている限りにおいて、ドキュメント内の順序、階層、同一性を維持します。 つまり要素のコレクションは、重複する要素を除外して、ドキュメント内の順序で返されます。 定義により属性に順序はないので、特定の要素について、返される属性に暗黙の順序はありません。
特定のタグ名を持つすべての要素のコレクションは、タグ名自体を使用して表現されます。 ピリオドとフォワード スラッシュ (./) を使用して、現在のコンテキストから要素を選択するように指定できますが、現在のコンテキストは既定で使用されるので、これを明示的に示す必要はありません。
例
式 |
説明 |
---|---|
./first-name |
すべての <first-name> 要素。 この式は次の式と等価なことに注意してください。 |
first-name |
すべての <first-name> 要素。 |
コレクション内のインデックス化
XPath 式では、ノード セット内の特定のノードを簡単に照会することができます。 その場合は、インデックスとなる序数を角かっこで囲みます。 序数は 1 ベースです (最初の要素は番号 1)。
角かっこ ([]) は、スラッシュ記号 (/ および //) よりも高い優先順位を持ちます。 詳細については「演算子および特殊文字」を参照してください。
例
式 |
説明 |
---|---|
author[1] |
最初の <author> 要素。 |
author[first-name][3] |
<first-name> 子要素を持つ 3 番目の <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> 要素。 |
上の例は、child:: 軸などの暗黙の既定値を使用した XPath コレクションの簡単な例です。 この軸では、子ノードのコレクションに対してドキュメントの順方向にインデックスが付けられます。
ancestor:: など他の軸については、XPath 式中で明示的に軸名を使用してください。 この軸では、祖先のコレクションに対してドキュメントの逆方向にインデックスが付けられます。 前の表からこの例を考えてみましょう。
x/y[1]
この式は次の式と等価です。
x/child::y[1]
2 つの式とも、"各 <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] |
少なくとも 1 つの <degree> 要素または <award> 要素を含み、少なくとも 1 つの <publication> 要素を含む、すべての <author> 要素。 |