gpt4 book ai didi

xml - If then else 在 XPath 1.0 中

转载 作者:数据小太阳 更新时间:2023-10-29 02:02:48 26 4
gpt4 key购买 nike

我有下一个表达式:

population = tree.xpath('(//tr/td/b/a[contains(text(), "Population")]/../../following-sibling::td/span/following-sibling::text())[1] or'
'//tr/td/b/a[contains(text(), "Population")]/../../following-sibling::td/span/text())

返回“真”。

如果我使用“|”它不是“或”,而是结合了第一条路径和第二条路径的值,例如 ['11 061 886', '▼']

如何使逻辑如下:

If the 1st path exists:
get the 1st value
elif the 2nd path exists:
get the 2nd value
else:
pass

?

我明白这很简单,但找不到答案。

最佳答案

如果您真的找不到 XPath 2.0 处理器,XPath 1.0 中有一些解决方法可能适合您。

如果要选择节点集,则代替

if (A) then B else C

你可以写

B[A] | C[not(A)]

同时记住条件 A 可能必须更改,因为上下文节点不同。

如果要返回字符串,则代替

if (A) then B else C

你可以使用可怕的解决方法

concat(substring(B, 1, boolean(A) div 0), substring(C, 1, not(A) div 0))

这依赖于 (true div 0) 是正无穷大,而 (false div 0) 是 NaN。

(我想我是对的。我使用 XPath 1.0 已经很多年了。但是有一些这样的表达式是有效的。)

对于数字,你可以使用

B * boolean(A) + C * not(A)

回复 false=0,true=1。

对于多个条件 like

if (A) then X else if (B) then Y else Z

你可以使用类似的逻辑,例如节点集变成了

X[A] | Y[not(A) and B] | Z[not(A or B)]

关于xml - If then else 在 XPath 1.0 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36191585/

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