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