XPath文法

XPathは、パス(path)またはステップ(steps)に従って、XMLドキュメント内のノードやノード集合を選択するためにパス表达式を使用します。

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

ルート要素 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 子要素の最後の二つ目の book 要素を選択します。
/bookstore/book[position()<3] bookstore 要素の最初の二つの子要素に属する 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 要素を選択します。