XPath 構文


XPath はパス式を使用して、XML ドキュメント内のノードまたはノードセットを選択します。ノードはパスまたはステップに沿って選択されます。


XML サンプル文書

以下の例では、この XML ドキュメントを使用します。

例

<?xml version="1.0" encoding="UTF-8"?> <bookstore> <book> <title lang="eng">Harry Potter</title> <price>29.99</price> </book> <book> <title lang="eng">Learning XML</title> <price>39.95</price> </book> </bookstore>


ノードの選択

XPath はパス式を使用して XML ドキュメント内のノードを選択します。ノードはパスまたはステップに沿って選択されます。以下に、最も便利なパス式を示します。

式 説明
nodename このノードのすべての子ノードを選択します。
/ ルートノードから選択します(子ノードを取得)。
// 一致する現在のノードから、ドキュメント内のノードを位置に関係なく選択します(子孫ノードを取得)。
. 現在のノードを選択します。
.. 現在のノードの親ノードを選択します。
@ 属性を選択します。

以下の表に、いくつかのパス式とその結果を示します。

パス式 結果
bookstore 「bookstore」という名前のすべてのノードを選択します。
/bookstore

ルート要素 bookstore を選択します。

注:パスがスラッシュ (/) で始まる場合、そのパスは常に要素への絶対パスを表します!

bookstore/book bookstore の子要素であるすべての book 要素を選択します。
//book ドキュメント内の位置に関係なく、すべての book 子要素を選択します。
bookstore//book bookstore 要素の子孫であるすべての book 要素を、bookstore の下のどこにあるかに関係なく選択します。
//@lang 「lang」という名前のすべての属性を選択します。


述語(Predicates)

述語は、特定のノードまたは指定された値を含むノードを検索するために使用されます。

述語は角括弧内に埋め込まれます。

以下の表に、述語を含むいくつかのパス式とその結果を示します。

パス式 結果
/bookstore/book[1] bookstore の子要素である最初の book 要素を選択します。
/bookstore/book[last()] bookstore の子要素である最後の book 要素を選択します。
/bookstore/book[last()-1] bookstore の子要素である最後から2番目の book 要素を選択します。
/bookstore/book[position()<3] bookstore 要素の子要素である最初の2つの book 要素を選択します。
//title[@lang] 「lang」という名前の属性を持つすべての title 要素を選択します。
//title[@lang='eng'] 値が「eng」の lang 属性を持つすべての title 要素を選択します。
/bookstore/book[price>35.00] bookstore 要素のすべての book 要素を選択します。ただし、その中の price 要素の値が 35.00 より大きい必要があります。
/bookstore/book[price>35.00]//title bookstore 要素内の book 要素のすべての title 要素を選択します。ただし、その中の price 要素の値が 35.00 より大きい必要があります。


未知のノードの選択

XPath ワイルドカードを使用して、未知の XML 要素を選択できます。

ワイルドカード 説明
* 任意の要素ノードに一致します。
@* 任意の属性ノードに一致します。
node() 任意のタイプのノードに一致します。

以下の表に、いくつかのパス式とその結果を示します。

パス式 結果
/bookstore/* bookstore 要素のすべての子要素を選択します。
//* ドキュメント内のすべての要素を選択します。
//title[@*] 属性を持つすべての title 要素を選択します。


複数のパスの選択

パス式で「|」演算子を使用すると、複数のパスを選択できます。

以下の表に、いくつかのパス式とその結果を示します。

パス式 結果
//book/title | //book/price book 要素のすべての title 要素と price 要素を選択します。
//title | //price ドキュメント内のすべての title 要素と price 要素を選択します。
/bookstore/book/title | //price bookstore 要素に属する book 要素のすべての title 要素、およびドキュメント内のすべての price 要素を選択します。
その他の拡張