我想循环查找以字符串开头并以数字结尾的元素,但我不知道如何使用ends-with()
我这里有这段代码
*[starts-with(name(), 'cup') and ends-with(name(), '_number')]
ps:不确定应用程序使用的xpath版本
答案 0 :(得分:1)
这在XPath 2.0中是直截了当的,其中包含此表达式
//*[matches(name(), '^cup.*\d$')]
将根据要求选择名称以cup
开头并以数字结尾的所有元素。
由于XPath 1.0缺少正则表达式,ends-with()
以及测试字符串是否为数字的函数,因此XPath 1.0会使您的请求变得更加复杂。这是一个可行的解决方案:
//*[starts-with(name(), 'cup')
and number(substring(name(),string-length(name())))
= number(substring(name(),string-length(name())))]
请注意,第二个子句是a clever way by Dimitre Novatchev to test in XPath 1.0 whether a string is a number。
这是检查XPath 1.0中数字结尾的较短方法:
//*[starts-with(name(), 'cup')
and not(translate(substring(name(),string-length(name())), '0123456789', ''))]
答案 1 :(得分:1)
我相信ends-with
不在Xpath 1.0中,您必须使用至少XPath 2.0,然后您可以使用matches()
将字符串与数字结尾匹配,如:
matches(name(), '.*\d+$')
`然后xpath将是:
*[starts-with(name(), 'cup') and matches(name(), '.*\d+$')]
或者像@kjhughes在答案中提到的那样:
*[matches(name(), '^cup.*\d+$')]