为何XPATH中的OR运算符无法生效?求排查表达式问题
你的XPATH表达式存在的错误及修正方案
核心错误1:文本拼写错误
你写的"Seller Finanacing Available"里的Finanacing是拼写错误,正确拼写应为Financing(少了一个字母c)。XPATH的文本匹配是精确匹配,拼写错误会导致找不到对应的<th>元素,后续的兄弟节点查找自然也无法生效。
核心错误2:逻辑或运算符使用错误
- 第二个表达式里用了
|,这是XPATH的节点集并集运算符,不是逻辑或。逻辑或的正确写法是小写的or(XPATH对运算符大小写不敏感,但规范写法为小写,第一个表达式的OR语法本身没问题,但受前面拼写错误影响整体失效)。 - 用
|的写法会被解析为合并两个节点集,而非逻辑判断,语法和逻辑上都不符合你的需求。
额外问题:空文本匹配的局限性
你用text()=""匹配空文本,但如果<td>里包含空白字符(比如空格、换行、制表符),这个表达式会匹配失败。可以改用normalize-space(text())=""来忽略空白字符的影响。
修正后的XPATH表达式
//th[text()="Seller Financing Available"]/following-sibling::td[text()="Yes" or normalize-space(text())=""]
如果需要忽略<th>文本中的空白字符,也可以优化为:
//th[normalize-space(text())="Seller Financing Available"]/following-sibling::td[text()="Yes" or normalize-space(text())=""]
内容的提问来源于stack exchange,提问作者Aminah Nuraini
相关产品推荐
相关产品推荐

