XPath 语法

XPathはパス式を使ってXMLドキュメント内のノードやノード集合を選択します。ノードはパス(path)またはステップ(steps)を通じて選択されます。

XMLインスタンスドキュメント

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

<?xml version="1.0" encoding="ISO-8859-1"?>
<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

root要素bookstoreを選択します。

注:パスが正斜杠(/)で始まる場合、そのパスは常に特定の要素への絶対パスを表します!

bookstore/book bookstoreの子要素のすべてのbook要素を選択します。
//book ドキュメント内の位置に関係なくすべてのbook子要素を選択します。
bookstore//book bookstore要素の後裔のすべてのbook要素を選択しますが、その位置に関係なく。
//@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'] lang属性の値がengを持つすべての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要素に属するすべてのtitle要素およびドキュメント中のすべてのprice要素を選択します。