使用 XPath 匹配除一个之外的所有元素和文本
Posted
技术标签:
【中文标题】使用 XPath 匹配除一个之外的所有元素和文本【英文标题】:Matching all the elements and text excluding one by using XPath 【发布时间】:2020-11-21 11:13:04 【问题描述】:<div class="main">
<div class="column-items">
<div>
abcd
</div>
<h2>Thomas</h2>
<p>Ron</p>
</div>
<p>Dave</p>
Sample text here......
<b>Andrew</b>
El murciélago de Bacardí tiene su!!
<p>abcdef</p>
</div>
在上述结构中,我希望 XPath 获取所有内容,包括 <div class="main">
内的文本,除了我不想要第一个 div 元素的内容,即 <div class="column-items">
。
【问题讨论】:
显示您已经尝试过的内容。还可以共享所需的确切输出 【参考方案1】:如果您希望“主”div 中的所有文本节点不包括“列项”div 中的文本节点,请尝试:
//div[@class='main']//text()[not(ancestor::div[@class="column-items"])]
【讨论】:
【参考方案2】:问题标题要求除一个之外的所有元素和文本,您接着说应该排除第一个元素。如果您实际上只想要满足该条件的文本节点,请参阅@JaSON's answer。
如果您确实也想要所有元素,请使用此 XPath:
//div[@class='main']/node()[not(self::div[1])]
基于位置或此 XPath,
//div[@class='main']/node()[not(self::div[@class="column-items"])]
基于属性值。
【讨论】:
嗨,肯尼斯。 XPath 表达式末尾的normalize-space()
谓词如何排除空白节点? //div[@class='main']/node()[not(self::div[1])][normalize-space()]
没有提到这样的要求,但也许它可能会有所帮助。以上是关于使用 XPath 匹配除一个之外的所有元素和文本的主要内容,如果未能解决你的问题,请参考以下文章