スポンサーリンク

[XSLT] XPathについて・色々な書き方

XPathの概要

XPathは、XML文書内のパスのこと。
XPathでは、要素や要素の属性などの位置を特定することができる。

XPathの色々な書き方

XPath 意味
//要素名 指定した要素すべて。
親要素//要素名のようにしたら//の間は何でもよくて、親要素、要素名が一致しているものがすべて対象。
要素名/@属性名 要素名に@で指定した属性が存在するのが対象。
要素名/[@属性名=”属性値”] 上記に加え、属性値が一致したのが対象。
要素名[2] 2番目の要素
要素名[last()] 最後の要素
node() 属性ノードとルートノードを除く、全てのノード
* 全ての要素ノード
@* 全ての属性ノード
@*|node()
全てのノード
text() 全てのテキストノード
count(要素名) 指定した要素の数を返す

サンプルコード

XML

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="sample.xsl"?>
<root>
    <data>
        <name age="23">松本</name>
        <department>営業部</department>
    </data>
    <data>
        <name age="33">藤原</name>
        <department>開発部</department>
    </data>
    <data>
        <name age="63" position="leader">丸山</name>
        <department>開発部</department>
    </data>    
</root>

XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">
        <sample1><xsl:value-of select="root/data/name" /></sample1>
        <sample2><xsl:value-of select="root/data/name/@age" /></sample2>
        <sample3><xsl:value-of select="root/data/name[@position='leader']" /></sample3>
        <sample4><xsl:value-of select="root/data[2]/name" /></sample4>
        <sample5><xsl:value-of select="root/data[last()]/name" /></sample5>
        <sample6><xsl:value-of select="root/data/name/node()" /></sample6>                
        <sample7><xsl:value-of select="count(root/data)" /></sample7>
    </xsl:template>
</xsl:stylesheet>

変換結果

<?xml version="1.0" encoding="UTF-8"?>
<sample1>松本</sample1>
<sample2>23</sample2>
<sample3>丸山</sample3>
<sample4>藤原</sample4>
<sample5>丸山</sample5>
<sample6>松本</sample6>
<sample7>3</sample7>

 

解説

value-of要素で取ってくると、最初の一つしかわからないので、
複数でとれたかのどうかは、今回見送っている。

node()と*の違い

sample7を*にすると、name要素の子のすべての要素が対象となるので取得できない。
node()ならname要素の中にあるテキストノードということで文字列を取ってくる。

XSLT
スポンサーリンク
シェアする
trelab