是的,在 XPath 1.0 中有一种方法可以做到这一点:
连接(
substring($s1, 1, number($condition) * 字符串长度($s1)),
substring($s2, 1, number(not($condition)) * 字符串长度($s2))
)
这依赖于两个互斥字符串的连接,如果条件为假 ( 0 * string-length(...)
),第一个为空,如果条件为真,第二个为空。这被称为“Becker 方法”,归功于Oliver Becker (原始链接现已失效,网络存档有副本)。
在你的情况下:
连接(
子串(
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(), ':') 结尾
))
* string-length(//div[@id='head']/text())
)
)
虽然我会尝试摆脱所有"//"
以前的。
此外,还有可能//div[@id='head']
返回多个节点。
请注意这一点 - 使用//div[@id='head'][1]
更具防御性。