PHP XPath如何实现多not条件排除指定img元素
XPath 多条件排除节点写法
直接在现有筛选谓词中用and拼接第二个排除规则即可,最终可用的XPath表达式如下:
//img[not(ancestor::*[@id="wpadminbar"]) and not(starts-with(@src, 'data:image'))]
规则说明
- 第一条规则
not(ancestor::*[@id="wpadminbar"]):排除所有id为wpadminbar的元素内部的img节点,相比原有写法限定祖先必须是div的逻辑兼容性更好,即便wpadminbar的标签类型变更(比如改为nav、header)也能正常匹配;如果确定wpadminbar永远是div元素,保留原有ancestor::div[@id="wpadminbar"]的写法也可正常运行。 - 第二条规则
not(starts-with(@src, 'data:image')):排除src以data:image开头的内联图片,这里使用starts-with()函数而非contains(),可以避免正常图片的src路径中恰好包含data:image字符串时被误过滤,匹配精度更高。
针对提供的测试HTML结构,该表达式会准确返回最后两个符合要求的外部图片节点,wpadminbar容器内的2张图片、内联data类型的svg图片都会被正确排除。
内容的提问来源于stack exchange,提问作者Uxair
相关产品推荐
相关产品推荐

