我有以下 XML
<Answer>
<Label>FCVCMileage</Label>
<Value>3258</Value>
<Iteration>0</Iteration>
<DataType>NUMBER</DataType>
</Answer>
并且需要获取里程标签下的值。然而,里程的 4 个字母前缀可以是 8 个不同前缀中的任意一个。
我知道我可以通过使用 xsl:if 或 xsl:choose 测试每个组合来找到该值,但是有没有一种更优雅的方法可以类似于以下 SQL,并且不需要更改正在执行的代码:添加了其他前缀。
WHERE label LIKE '%Mileage'
注意。只会有 1 个标签元素包含“里程”一词
干杯!
最佳答案
I know I could find the value by testing for every combination using xsl:if or xsl:choose but is there a more elegant way that would work similar to the following SQL and also wouldn't need changes to code being made if other prefixes were added.
WHERE label LIKE '%Mileage'
在 XPath 2.0 中有一个标准函数 ends-with()
在 XPath 1.0 中使用:
/*[Label[substring(., string-length(.) - 6) = 'Mileage']]/value
注意:
contains(Label, 'Mileage')
与上面的 SQL 子句不同。例如,它将选择这个节点:
<Label>xxx Mileage yyy</Label>
关于XSLT 与 SQL 类似的功能 "WHERE LIKE",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4656169/