如何在Xpath中使用exclude过滤语法 排除含指定文本的span元素
问题分析与XPath修正方案
原有XPath的错误点
- 上下文匹配错误:你筛选的上下文是
div节点,条件里的self::span是判断当前节点是否为span,对div节点来说永远返回false,相当于排除规则完全没有生效,最终只会完整返回id=A的整个div节点(包含两个不需要的IGNORE span)。 - 语法错误:条件表达式末尾缺少一个闭合的右括号,
]前少了对应的),直接运行会触发语法报错。 - 逻辑错误:排除两个IGNORE节点应该用
and逻辑,你用了or,就算条件生效也无法同时排除两个目标节点。
正确实现方案
根据你的提取需求,可直接使用以下XPath:
方案1:提取id=A的div下所有非IGNORE的子节点(包含div自带的文本和三个水果span,和你给出的目标结构完全匹配)
//div[@id='A']/node()[not(self::span and contains(text(), 'IGNORE_'))]
方案2:仅提取三个目标水果的span节点
//div[@id='A']/span[not(contains(text(), 'IGNORE_'))]
方案3:如果需要直接获取三个水果的文本内容
//div[@id='A']/span[not(contains(text(), 'IGNORE_'))]/text()
内容的提问来源于stack exchange,提问作者Huahua
相关产品推荐
相关产品推荐

