gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:38:19 32 4
gpt4 key购买 nike

使用 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com