使用算术运算符的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及更高版本中允许。