xpath - XPath 中是否有 "if -then - else "语句?

标签 xpath if-statement

使用 xpath 中的所有丰富功能,您似乎可以执行 "if"。然而,我的引擎一直坚持“没有这样的功能”,我在网上几乎找不到任何文档(我发现了一些可疑的来源,但它们的语法不起作用)

我需要从字符串的末尾删除 ':' (如果存在),所以我想这样做:

if (fn:ends-with(//div [@id='head']/text(),': '))
            then (fn:substring-before(//div [@id='head']/text(),': ') )
            else (//div [@id='head']/text())

有什么建议吗?

最佳答案

是的,在 XPath 1.0 中有一种方法可以做到:
连接(
substring($s1, 1, number($condition) * string-length($s1)),
substring($s2, 1, number(not($condition)) * string-length($s2))
)

这依赖于两个互斥字符串的串联,如果条件为假(0 * string-length(...)),则第一个为空,如果条件为真,则第二个为空。这称为“贝克尔方法”,归因于 Oliver Becker (原始链接现已失效, the web archive has a copy )。
在你的情况下:
连接(
子串(
substring-before(//div[@id='head']/text(), ': '),
1、
数字(
结尾(//div[@id='head']/text(), ':')
)
* string-length(substring-before(//div [@id='head']/text(), ':'))
),
子串(
//div[@id='head']/text(),
1、
数字(不是(
结尾(//div[@id='head']/text(), ':')
))
* 字符串长度(//div[@id='head']/text())
)
)

虽然我会尝试摆脱所有 "//"前。
此外,还有可能是//div[@id='head']返回多个节点。
请注意——使用 //div[@id='head'][1]更具防御性。

关于xpath - XPath 中是否有 "if -then - else "语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/971067/

相关文章:

python - 尝试从 Web 表中提取数据时出现 Selenium 错误

java - "and ' 和有什么区别?

javascript - 访问影子根内的元素

xpath - 带有元素内容的命名空间不可知 XPath 查询

python if语句太长太难看,有没有办法缩短它

javascript - 了解获取数组中第二低和第二高的值

c# - 整理 if 语句 - 未实例化的对象是否可以在 AND 运算符中

java - 如何测试循环中是否有多个字母

python - 使用 xPath 从 pom 中提取版本号时遇到问题

python - 如果无法定位元素,Selenium 继续执行脚本