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 要素を選択します。 |