使用xpath函数ends-with()来查找数字

时间:2017-06-23 11:06:21

标签: xml xpath

我想循环查找以字符串开头并以数字结尾的元素,但我不知道如何使用ends-with()

来完成

我这里有这段代码

*[starts-with(name(), 'cup') and ends-with(name(), '_number')]

ps:不确定应用程序使用的xpath版本

2 个答案:

答案 0 :(得分:1)

XPath 2.0

这在XPath 2.0中是直截了当的,其中包含此表达式

//*[matches(name(), '^cup.*\d$')]

将根据要求选择名称以cup开头并以数字结尾的所有元素。

XPath 1.0

由于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+$')]