如何实现条件XPath:优先取Xpath1,不存在时再取Xpath2?
优先选择XPath节点:Xpath1存在时用它,否则用Xpath2
你遇到的问题是因为Xpath1 | Xpath2是取两个表达式的并集,返回的节点顺序由文档中的出现位置决定,而非你需要的优先级逻辑。要实现「优先用Xpath1,仅当它不存在时才用Xpath2」的需求,分两种场景处理:
适用于XPath 2.0+的写法(逻辑最直观)
直接使用条件判断表达式:
if (exists(Xpath1)) then Xpath1 else Xpath2
这个写法会先检查Xpath1是否有匹配节点,存在则返回Xpath1的结果,否则返回Xpath2的所有匹配内容。
兼容XPath 1.0的写法(适配旧工具/框架)
如果你的环境只支持XPath 1.0(比如部分旧版爬虫、测试工具),可以用count()函数判断Xpath1的存在性:
Xpath1 | Xpath2[count(Xpath1) = 0]
- 前半部分
Xpath1会先返回所有匹配节点; - 后半部分仅当
Xpath1没有任何匹配(count(Xpath1)=0)时,才会返回Xpath2的节点,完美实现优先级逻辑。
内容的提问来源于stack exchange,提问作者Hsaka
相关产品推荐
相关产品推荐

