我正在尝试弄清楚如何使用XPath
获取文字并排除某些标签。
让我们说(为了说明)我想从此页面的body
标记中获取所有文字(因此所有可见文字),但我不希望我的文字包含class="comment-copy"
标签中的文字即我不希望文本包含评论。
我尝试了这个,但它不起作用。它返回包含注释的文本。
//body//text()[not(*[contains(@class,"comment-copy")])]
你有什么想法吗?
修改
可能已经弄明白了,但也许有更好或更快的方法,所以我不会删除这个问题。
//body//text()[not(ancestor-or-self::*[contains(@class,"comment-copy")])]
答案 0 :(得分:1)
你非常接近。
只需更改
//body//text()[not(*[contains(@class,"comment-copy")])]
到
//body//text()[not(contains(../@class,"comment-copy"))]
请注意,这只会排除text()
个标记元素的直接子comment-copy
个节点。您的后续XPath将排除text()
个标记元素下的所有后代comment-copy
个节点。
注意:您可能希望加强@class
测试的稳健性;见Xpath: Find element with class that contains spaces。