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要素の中にあるテキストノードということで文字列を取ってくる。
