XPath の例
このトピックでは、「XPath リファレンス」全体を通じて提示される構文例を説明します。すべての例は、「XPath 構文のサンプル XML ファイル (inventory.xml)」に基づいてます。テスト ファイル内で XPath 式を使用する方法を示す例については、このトピックの最後の「和集合の例 ( | )」を参照してください。
式 | 説明 |
---|---|
|
現在のコンテキスト内のすべての |
|
現在のコンテキスト内のすべての |
|
現在のコンテキスト内のすべての |
|
このドキュメントのドキュメント要素 ( |
|
このドキュメント内のすべての |
|
ドキュメントのルートにある |
|
|
|
|
|
|
|
|
|
現在のコンテキスト内の 1 段階以上深いレベルにあるすべての |
|
|
|
|
|
現在のコンテキストのすべての孫要素です。 |
|
|
|
現在のコンテキストの |
|
現在のコンテキスト内の |
|
属性には要素の子が含まれないため、空のノード セットが返ります。この式は、XPath (XML Path Language) の文法上は使用可能ですが、厳密にいえば有効ではありません。 |
|
現在のコンテキストの |
|
現在のコンテキストのすべての |
|
現在の要素のコンテキストのすべての属性。 |
|
現在のコンテキスト ノード内のすべての |
|
現在のコンテキスト ノード内のすべての |
|
現在のコンテキスト ノード内の最初の |
|
子要素 |
|
|
|
|
|
|
インデックスは親を基準にして付けられる点に注意してください。次のデータについて考えてみましょう。
<x>
<y/>
<y/>
</x>
<x>
<y/>
<y/>
</x>
式 | 説明 |
---|---|
|
個々の |
|
個々の |
|
|
|
最初の |
これ以降に示す例では、XPath のサンプル XML ファイルについて説明します。
式 | 説明 |
---|---|
|
現在のコンテキスト ノードの最後の |
|
現在のコンテキスト ノードの個々の |
|
現在のコンテキスト ノードの |
|
少なくとも 1 つの子要素 |
|
少なくとも 1 つの子要素 |
|
少なくとも 1 つの子要素 |
|
少なくとも 1 つの子要素 |
|
少なくとも 1 つの子要素 |
|
少なくとも 1 つの子要素 |
|
少なくとも 1 つの |
|
少なくとも 1 つの子要素 |
|
少なくとも 1 つの子要素 |
|
値が |
|
最初の子要素 |
|
最初の子要素 |
|
|
|
値が |
|
値が |
|
最初の 3 冊の本 (1、2、3)。 |
|
値が |
|
値が |
|
値が |
|
値が |
|
持っている |
|
コンテキスト ノードの子要素である最初の 2 つの |
|
コンテキスト ノード内の個々の |
|
コンテキスト ノードの最も近い祖先にあたる |
|
コンテキスト ノードの最も近い祖先にあたる |
|
現在のコンテキストで最も近い祖先にあたる |
和集合の例 ( | )
和集合演算の例を示すために、次の 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