我想从我的XML文件中获取一个节点,该节点有一个前缀,例如“latest_”,但这可能会改变,我希望我的XSLT尽可能流畅。这是我想要使用的XPath:
/data/stats/*_cost
这应与latest_cost
,newest_cost
,anything_cost
相匹配,有没有办法做到这一点?
干杯: - )
答案 0 :(得分:64)
这是正确的XPath 1.0表达式,它在任何命名空间中选择一个名称等于“_cost”的最后5个字符的元素。
/data/stats/*[substring(name(), string-length(name()) - 4) = '_cost']
答案 1 :(得分:6)
使用XPath 1.0,您可以使用/data/stats/*[substring-after(name(), '_cost') = '']
模式。检查元素的名称是否以_cost
后缀结尾。
在XPath 2.0中有fn:ends-with(str, str)
,相应的表达式为*[ends-with(name(), '_cost')]
。
答案 2 :(得分:6)
您也可以使用contains
例如
/data/stats[contains(.,'_cost')]
答案 3 :(得分:4)
以上对我不起作用。我不得不“稍微”修改如下:
/data/stats/*[contains(name(),'_cost')]