XPath

XPath

XML文書の中の特定の要素を指し示す記述方法を定めた規格。W3Cが勧告した標準仕様で、XSLTやXPointerで使われる位置指定の記述方式を独立させたもの。

ハイパーリンクなどに使われる人為的に付加されたアンカーによる指定とは異なり、XMLデータを表す木構造をたどって文書内のあらゆる要素や属性にアクセスする手段を提供する。

基本的な記述の仕方はUNIXのファイルシステムに似ていて、文書木構造の頂点となるルートノードを「/」であらわし、以下、「/」で区切って要素をたどっていく。a要素の中のbという値を参照するには「/a/b」と記述する。

ノードのデータ型やノードの種類、名前空間(XML namespace)の扱いなどについても規定があり、これらを使用して条件式や演算などを含んだ複雑な位置指定を行うこともできる。

XPathとは - 意味/解説/説明/定義 : IT用語辞典

データモデル (Data Model)

ノード 説明  
ルートノード
root node
最上位ノード /
要素ノード
element node
XMLの要素を表すノード  
属性ノード
attribute node
要素内で指定された属性を表すノード @
テキストノード
text node
開始タグと終了タグで挟まれた文字列データ text()
処理命令ノード
processing instruction node
処理命令を表すノード  
コメントノード
comment node
コメントを表すノード  
名前空間ノード
namespace node
名前空間を表すノード  
@IT:XML文書内の位置を正確に指し示すXPath 吉田稔、青木秀起 (2002/06/18)

class属性

特定のclass属性を持つ要素にマッチさせるには、次のような方法があります。

  1. //*[@class="foo"]
  2. //*[contains(@class,"foo")]
  3. //*[contains(concat(" ",@class," "), " foo ")]
  4. //*[contains(concat(" ",normalize-space(@class)," "), " foo ")]

それぞれマッチする正確性が異なり、後の方がより正確になります。

  1. class="foo"にのみマッチ ("foo bar"にはマッチしない)
  2. class属性に"foo"の文字列を含む場合にマッチ ("afoo"にもマッチ)
  3. class属性に前後にタブや改行がない"foo"を含む場合にマッチ
  4. class属性に"foo"を含む場合にマッチ
特定のclass属性を持った任意の要素にマッチするXPath | 3.14

使用例

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<a id="test">
    <b>ABC</b>
    <c>10</c>
    <c>20</c>
</a>
XML文書
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html" encoding="utf-8" />

    <xsl:template match="/">
        <xsl:value-of select="/a/b" /> <!-- XPath -->
    </xsl:template>

</xsl:stylesheet>
XSLTスタイルシート

「ABC」と出力されます。

<xsl:value-of select="..."/>のselect属性の値を書き換えると、下表のように出力が変化します。

XPath 出力
/a/b ABC
/a/b/text() ABC
//a ABC 10 20
//b ABC
/a/@id test
/a/c 10
/a/c[1] 10
/a/c[2] 20