XPath 概要
XPathを使用して、XMLドキュメント内のノードまたはノードのセットを選択できます。ノードは、パス(Path)またはステップ(steps)に従って選定されます。
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 内のノードとノードセットを選択できます。 ノードは次のようなパス(Path)とステップ(steps)に従って選定されます。
次のリストはよく使用するXpathの書き方です。
パス式 | 記述 |
nodename | ノードの全ての子ノードを選択 |
/ | ルートノードから選択 |
// | 位置に関係なく、選択に一致する現在のノードからドキュメント内のノードを選択します。 |
. | 現在のノードを選択 |
.. | 現在のノードの親ノードを選択 |
@ | 属性を選択 |
次のテーブルで、上記のXpath 書き方とその返した結果がリストされます。
パス式 | 結果 |
bookstore | bookstore 要素の全ての子ノードを選択します。 |
/bookstore | ルート要素となる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 要素の最後から二番目のBook 要素を選択 |
/bookstore/book[position()] | Bookstore 要素の最初の2つのBook 要素を選択 |
//title[@lang] | 属性名がlangになるtitle 要素を選択 |
//title[@lang='eng'] | 属性名がlangになり、その値がengになるtitle 要素を選択 |
/bookstore/book[price>35.00] | bookstore 要素でpriceの値は35.00より大きなbook 要素を選択 |
/bookstore/book[price>35.00]//title | bookstore 要素のbook 要素でpriceの値は35.00より大きなtitle 要素を選択 |
不明なノードの選択
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 要素を選択 |