使用算术运算符的Xpath 1.0

使用算术运算符的Xpath 1.0,xpath,xpath-1.0,Xpath,Xpath 1.0,假设我们有: <a href="www.something/page/1">something</a> 但它不起作用,我想我不能用它 //a/@href/number(substring-after(.,"page/"))+1 这并不是一个精确的分页思想,所以我可以使用分页,我只是选择它作为一个例子。关键在于找到一种在xpath 1.0中增加值的方法。有什么帮助吗?你能做的是 concat( translate(//a/@href, '0123456789',

假设我们有:

<a href="www.something/page/1">something</a>
但它不起作用,我想我不能用它

//a/@href/number(substring-after(.,"page/"))+1
这并不是一个精确的分页思想,所以我可以使用分页,我只是选择它作为一个例子。关键在于找到一种在xpath 1.0中增加值的方法。有什么帮助吗?

你能做的是

concat(
   translate(//a/@href, '0123456789', ''),
   translate(//a/@href, translate(//a/@href, '0123456789', ''), '') + 1
)
所以,它将“href”属性和所有被删除的数字(总和为1)连接起来,将“href”属性和除数字以外的任何内容连接起来


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

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

concat(
    substring-before(//a/@href, 'page/'), 
    'page/', 
    substring-after(//a/@href, 'page/') + 1)
此XPath基于当前节点作为
@href
属性:

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

你的操作顺序有点,嗯,不正常。使用类似以下内容:

substring-after(//a/@href, 'page/') + 1
请注意,没有必要将字符串值显式转换为数字。发件人:

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

总而言之:

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

www.something/page/2

谢谢,理论上,这一个看起来会起作用,但它说我有一个无效的表达式。我们真的可以将这些函数用作节点或位置路径吗?使用XPath 1.0,您可以在输入文档中选择节点,并可以计算字符串、数字或布尔值等基本值。我的建议是根据
//a/@href
找到的第一个
href
属性计算一个字符串值。使用XPath 1.0,您不能将函数调用放入步骤中,如
//a/@href/concat(…)
,这仅在XPath 2.0和XQuery 1.0及更高版本中允许。