このトピックでは、「XPath リファレンス」全体を通じて提示される構文例を説明します。すべての例は、「XPath 構文のサンプル XML ファイル (inventory.xml)」に基づいてます。テスト ファイル内で XPath 式を使用する方法を示す例については、このトピックの最後の「和集合の例 ( | )」を参照してください。
./author
|
現在のコンテキスト内のすべての <author> 要素。これは、次の行の式に等しくなることに注意してください。 |
author
|
現在のコンテキスト内のすべての <author> 要素。 |
first.name
|
現在のコンテキスト内のすべての <first.name> 要素。 |
/bookstore
|
このドキュメントのドキュメント要素 (<bookstore> )。 |
//author
|
このドキュメント内のすべての <author> 要素。 |
book[/bookstore/@specialty=@style]
|
ドキュメントのルートにある <bookstore> 要素の specialty 属性と同じ値の style 属性を持っているすべての <book> 要素。 |
author/first-name
|
<author> 要素の子要素であるすべての <first-name> 要素。
|
bookstore//title
|
<bookstore> 要素内の 1 段階以上深いレベル (任意の子孫) に含まれているすべての <title> 要素。これは、次の行の式とは異なる点に注意してください。
|
bookstore/*/title
|
<bookstore> 要素の孫要素であるすべての <title> 要素。
|
bookstore//book/excerpt//emph
|
<bookstore> 要素内の任意の場所にある <book> 要素の子要素 <excerpt> 内の任意の場所にあるすべての <emph> 要素。
|
.//title
|
現在のコンテキスト内の 1 段階以上深いレベルにあるすべての <title> 要素。この状況は、ピリオド表記が必須である場合において、基本的に 1 回だけ発生することに注意してください。 |
author/*
|
<author> 要素の子要素であるすべての要素。
|
book/*/last-name
|
<book> 要素の孫要素であるすべての <last-name> 要素。
|
*/*
|
現在のコンテキストのすべての孫要素です。 |
*[@specialty]
|
specialty 属性を持つすべての要素。
|
@style
|
現在のコンテキストの style 属性。 |
price/@exchange
|
現在のコンテキスト内の <price> 要素の exchange 属性。 |
price/@exchange/total
|
属性には要素の子が含まれないため、空のノード セットが返ります。この式は、XPath (XML Path Language) の文法上は使用可能ですが、厳密にいえば有効ではありません。 |
book[@style]
|
現在のコンテキストの style 属性を持つすべての <book> 要素。 |
book/@style
|
現在のコンテキストのすべての <book> 要素の style 属性。 |
@*
|
現在の要素のコンテキストのすべての属性。 |
./first-name
|
現在のコンテキスト ノード内のすべての <first-name> 要素。これは、次の行の式に等しくなることに注意してください。 |
first-name
|
現在のコンテキスト ノード内のすべての <first-name> 要素。 |
author[1]
|
現在のコンテキスト ノード内の最初の <author> 要素。 |
author[first-name][3]
|
子要素 <first-name> を持っている 3 番目の <author> 要素。 |
my:book
|
my 名前空間の <book> 要素。
|
my:*
|
my 名前空間のすべての要素。
|
@my:*
|
my 名前空間からのすべての要素 (これには、my 名前空間からの要素の修飾されていない属性は含まれません)。
|
インデックスは親を基準にして付けられる点に注意してください。次のデータについて考えてみましょう。
<x>
<y/>
<y/>
</x>
<x>
<y/>
<y/>
</x>
x/y[1]
|
個々の <x> の最初の子要素 <y> 。これは、次の行に示す式と同じです。 |
x/y[position() = 1]
|
個々の <x> の最初の子要素 <y> 。 |
(x/y)[1]
|
<x> 要素の子要素 <y> の集合全体で最初の <y> 。
|
x[1]/y[2]
|
最初の <x> の 2 番目の子要素 <y> 。 |
これ以降に示す例では、XPath のサンプル XML ファイルについて説明します。
book[last()]
|
現在のコンテキスト ノードの最後の <book> 要素。 |
book/author[last()]
|
現在のコンテキスト ノードの個々の <book> 要素の最後の子要素 <author> 。 |
(book/author)[last()]
|
現在のコンテキスト ノードの <book> 要素の子要素 <author> の集合全体で最後の <author> 要素。 |
book[excerpt]
|
少なくとも 1 つの子要素 <excerpt> を含むすべての <book> 要素。 |
book[excerpt]/title
|
少なくとも 1 つの子要素 <excerpt> を含む <book> 要素を親要素とするすべての <title> 要素。 |
book[excerpt]/author[degree]
|
少なくとも 1 つの子要素 <excerpt> を含む <book> 要素の子要素であると同時に、自身が少なくとも 1 つの子要素 <degree> を持っているすべての <author> 要素。 |
book[author/degree]
|
少なくとも 1 つの子要素 <degree> が含まれた <author> を子要素として持つすべての <book> 要素。 |
author[degree][award]
|
少なくとも 1 つの子要素 <degree> を含み、少なくとも 1 つの子要素 <award> を含む、すべての <author> 要素。 |
author[degree and award]
|
少なくとも 1 つの子要素 <degree> を含み、少なくとも 1 つの子要素 <award> を含む、すべての <author> 要素。 |
author[(degree or award) and publication]
|
少なくとも 1 つの <degree> または <award> を含み、少なくとも 1 つの <publication> を子要素として含むすべての <author> 要素。 |
author[degree and not(publication)]
|
少なくとも 1 つの子要素 <degree> を含んでいるが、子要素 <publication> を含んでいないすべての <author> 要素。 |
author[not(degree or award) and publication]
|
少なくとも 1 つの子要素 <publication> を含んでいるが、子要素 <degree> も子要素 <award> も含んでいないすべての <author> 要素。 |
author[last-name = "Bob"]
|
値が Bob である子要素 <last-name> を少なくとも 1 つ含むすべての <author> 要素。 |
author[last-name[1] = "Bob"]
|
最初の子要素 <last-name> の値が Bob になっているすべての <author> 要素。これは、次の行の式に等しくなることに注意してください。 |
author[last-name [position()=1]= "Bob"]
|
最初の子要素 <last-name> の値が Bob になっているすべての <author> 要素。 |
degree[@from != "Harvard"]
|
from 属性が "Harvard" と等しくないすべての <degree> 要素。
|
author[. = "Matthew Bob"]
|
値が Matthew Bob になっているすべての <author> 要素。 |
author[last-name = "Bob" and ../price > 50]
|
値が Bob である子要素 <last-name> と、値が 50 を上回る兄弟要素 <price> を持っているすべての <author> 要素。 |
book[position() <= 3]
|
最初の 3 冊の本 (1、2、3)。 |
author[not(last-name = "Bob")]
|
値が Bob である子要素 <last-name> を持っていないすべての <author> 要素。 |
author[first-name = "Bob"]
|
値が Bob である子要素 <first-name> を 1 つ以上持っているすべての <author> 要素。 |
author[* = "Bob"]
|
値が Bob である任意の子要素を持っているすべての author 要素。 |
author[last-name = "Bob" and first-name = "Joe"]
|
値が Bob である子要素 <last-name> と、値が Joe である子要素 <first-name> を持っているすべての <author> 要素。 |
price[@intl = "Canada"]
|
持っている intl 属性が "Canada" と等しい、コンテキスト ノード内のすべての <price> 要素。 |
degree[position() < 3]
|
コンテキスト ノードの子要素である最初の 2 つの <degree> 要素。 |
p/text()[2]
|
コンテキスト ノード内の個々の <p> 要素内の 2 番目のテキスト ノード。 |
ancestor::book[1]
|
コンテキスト ノードの最も近い祖先に当たる <book> 。 |
ancestor::book[author][1]
|
コンテキスト ノードの最も近い祖先に当たる <book> であり、<author> 要素を子要素として持つ <book> 要素。 |
ancestor::author[parent::book][1]
|
現在のコンテキストで最も近い祖先に当たる <author> であり、<book> 要素を親として持つ <author> 要素。 |
和集合の例 ( | )
和集合演算の例を示すために、次の XPath 式を使用します。
x | y/x
次の XML ファイルで、値が green または blue であるすべての <x> 要素を選択します。
XML ファイル (data1.xml)
<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="union.xsl"?>
<root>
<x>green</x>
<y>
<x>blue</x>
<x>blue</x>
</y>
<z>
<x>red</x>
<x>red</x>
</z>
<x>green</x>
</root>
XSLT ファイル (union.xsl)
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="root">
<xsl:for-each select="x | y/x">
<xsl:value-of select="."/>,
<xsl:if test="not(position()=last())">,</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
書式付き出力
green,blue,blue,green
プロセッサ出力
<?xml version="1.0" encoding="UTF-16"?>green,blue,blue,green
参照
リファレンス
ロケーション パスの例
概念
XPath 構文のサンプル XML ファイル (inventory.xml)