Xpath 1.0使用算术运算符

时间:2014-01-13 15:11:04

标签: xpath xpath-1.0

假设我们有这个:

<a href="www.something/page/1">something</a>

现在有办法让@href返回如下:“www.something / page / 2”。基本上返回@href值,但substring-after(。,“page /”)递增1.我一直在尝试像

//a/@href[number(substring-after(.,"page/"))+1]

但它不起作用,我认为我不能使用

//a/@href/number(substring-after(.,"page/"))+1

这不是一个分页思考,所以我可以使用分页,我只是选择了一个例子。关键是要找到一种在xpath 1.0中增加值的方法。有什么帮助吗?

3 个答案:

答案 0 :(得分:0)

你能做的是

concat(
   translate(//a/@href, '0123456789', ''),
   translate(//a/@href, translate(//a/@href, '0123456789', ''), '') + 1
)

这样就可以将'href'属性与所有被删除的数字连接起来,其总和为1,'href'除了数字之外的任何数字都被移除。

这可能就足够了,您的网址中的所有数字都出现在您的网址末尾。但通常XPath 1.0擅长选择输入中的节点,但不善于根据节点值的部分构造新值。

答案 1 :(得分:0)

有一种更简单的方法可以实现这一点,只需在页面后面加上子字符串,添加1,然后将它们全部重新组合在一起:

此XPath基于当前节点@href属性:

concat(substring-before(.,'page/'),
       'page/',
       substring-after(.,'page/')+1
     )

答案 2 :(得分:0)

您的操作顺序有点不好。使用这样的东西:

substring-after(//a/@href, 'page/') + 1

请注意,没有必要将字符串值显式转换为数字。来自the spec

  

数字运算符将其操作数转换为数字,就像使用   调用数字函数。

全部放在一起:

concat(
    substring-before(//a/@href, 'page/'), 
    'page/', 
    substring-after(//a/@href, 'page/') + 1)

结果:

www.something/page/2