2

假设我们有这个:

<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 中的值。有什么帮助吗?

4

3 回答 3

0

你能做的是

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

因此,将 'href' 属性与所有被删除的数字与 1 的总和和 'href' 与除数字之外的任何内容连接起来。

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

于 2014-01-13T15:30:12.793 回答
0

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

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

concat(substring-before(.,'page/'),
       'page/',
       substring-after(.,'page/')+1
     )
于 2014-01-14T01:45:06.847 回答
0

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

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

请注意,不必将字符串值显式转换为数字。从规格

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

把它们放在一起:

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

结果:

www.something/page/2
于 2014-01-14T01:51:47.593 回答