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