XPath

概念


XPathはW3Cの標準仕様で、XMLドキュメント内のノードを移動・検索するために作られており、XSLTのコア基盤です。XSLTのselect=""test=""の内部式にはすべてXPathが使われます。

  • パス式によりノードを特定
  • 文字列、数値、日付比較、ノード操作、論理演算など100種類以上の標準組み込み関数を搭載

7種類のノード型

ドキュメントノード(ルートノード)、要素ノード属性ノード、テキストノード、コメントノード、処理命令ノード、名前空間ノード。

例:<title lang="eng">Harry Potter</title>

  • <title> → 要素ノード
  • lang="eng" → 属性ノード
  • Harry Potter → テキストノード

概念

  1. 基本値(原子値 Atomic value):子ノードも親ノードも持たないノードの内容。例:eng29.99
  2. アイテム(Item):アイテム=ノード または基本値

XMLノード同士の関係

<bookstore><book><title></title></book></bookstore>を例に説明

  1. 親(Parent):要素と属性はそれぞれ親を一つだけ持ちます。booktitleの親ノード
  2. 子(Children):要素は複数の子ノードを持てます。titlepricebookの子ノード
  3. 兄弟(Sibling)同じ親ノードを持つノード。同じ階層のtitleとpriceは互いに兄弟ノード
  4. 祖先(Ancestor):親、親の親、上位すべてのノード。titleの祖先はbook、bookstore

パス式

パスと手順によってXMLノードを選択します

<bookstore>
  <book>
    <title lang="eng">Harry Potter</title>
    <price>29.99</price>
  </book>
</bookstore>Code language: HTML, XML (xml)
意味
bookstoreルート配下のbookstore要素を選択
/bookstore絶対パス、ルートノードから照合開始
bookstore/bookbookstore配下のすべてbook子要素を選択
//bookドキュメント内あらゆる場所のbook要素(グローバル検索)
//@lang名前がlangの属性ノードをすべて選択

XPath関数:position()

<xsl:value-of select="position()" />Code language: HTML, XML (xml)

position()はXPath標準関数で、ノードセット内における現在のノードの連番を取得し、カウントは1から始まります。

サンプル:連番出力

<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head></head>
<body>
<ul>
    <!--生徒一覧 class/student をループ -->
    <xsl:for-each select="class/student">
        <xsl:sort select="age"/>  <!--年齢昇順でソート-->
        <!--身長>160の生徒を抽出-->
        <xsl:if test="height &gt; 160">
            <li>
                <xsl:value-of select="position()" /><!--連番出力-->
                <xsl:value-of select="name"/><!--複数条件分岐-->
                <xsl:choose>
                    <xsl:when test="height &gt; 200">
                        <b><xsl:value-of select="age"/></b>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:value-of select="age"/>
                    </xsl:otherwise>
                </xsl:choose>
            </li>
        </xsl:if>
    </xsl:for-each>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>Code language: HTML, XML (xml)

XPath

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です