如何用单条XPath 1表达式从多组选中元素中排除特定元素?
用XPath 1.0实现多组元素选择并排除指定元素
可以用这条单XPath表达式实现需求,核心是在原多组元素选择逻辑外添加过滤条件,通过节点相等判断排除目标元素:
(//div[@class="something"] | //span/div | //div/span/div[@class="otherthing"])[not(self::node() = //div[@id="menu"] or self::node() = //div/span/div[@class="something3"] or self::node() = //body/span/div/span/div[1])]
关键说明:
- 把原多组选择器用括号包裹,确保过滤条件作用于所有选中的元素集合,而非仅最后一组。
self::node()用于获取当前遍历到的节点,XPath 1.0中节点间的=运算会判断两个节点是否为DOM中的同一个节点。- 用
or串联所有要排除的节点条件,再通过not()取反,最终得到原集合中剔除指定节点后的结果。
另外注意你原选择器存在语法错误://div[@class="something]缺少闭合双引号,实际使用时需修正为//div[@class="something"],否则会导致XPath解析失败。
内容的提问来源于stack exchange,提问作者Tocy777
相关产品推荐
相关产品推荐

