使用:
*[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>
转换计算两个 XPath 表达式,并将选定的节点复制到输出:
<HILTON method="buy"/>
<TON method="burn"/>
<SHERATON method="visit"/>
==========
<HILTON method="buy"/>
第一个表达式选择所有元素 - 上下文节点的子节点,其名称以“TON”结尾并且也具有method
属性。
第二个表达式从第一个表达式选择的节点中选择第一个节点。