使用:
*[substring(name(), string-length(name()) - 2) = 'TON'][@method][1]
説明:
この式は、XPath 2.0 標準関数に相当する XPath 1.0 を使用しますends-with()
。
XPath 2.0 式に相当する XPath 1.0 は次のとおりです。
ends-with($s, $s2)
は:
substring($s, string-lenth() - string-length($s2) + 1) = $s2
この最後の式では$s
、name()
と$s2
を置き換えます'TON'
XSLT ベースの検証:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<xsl:copy-of select=
"*[substring(name(), string-length(name()) - 2) = 'TON'][@method] "/>
==========
<xsl:copy-of select=
"*[substring(name(), string-length(name()) - 2) = 'TON'][@method][1] "/>
</xsl:template>
</xsl:stylesheet>
この XML ドキュメントに適用すると:
<t>
<HILTON method="buy"/>
<TON method="burn"/>
<TONIC method="drink"/>
<HILTON nomethod="yes"/>
<SHERATON/>
<SHERATON method="visit"/>
</t>
変換によって 2 つの XPath 式が評価され、選択されたノードが出力にコピーされます。
<HILTON method="buy"/>
<TON method="burn"/>
<SHERATON method="visit"/>
==========
<HILTON method="buy"/>
最初の式は、名前が「TON」で終わり、method
属性を持つコンテキスト ノードの子であるすべての要素を選択します。
2 番目の式は、最初の式で選択されたノードから最初のノードを選択します。