Xpath:选择除具有特定属性的元素之外的所有元素

Posted

技术标签:

【中文标题】Xpath:选择除具有特定属性的元素之外的所有元素【英文标题】:Xpath: Select All elements except element with specific attribute 【发布时间】:2022-01-03 13:39:21 【问题描述】:

我需要选择<p>节点中的文本,并排除span中属性为class="DoNotTranslate"的所有文本

例子:

<table>
  <p>Table0
  </p>
  <ol>
    <li>
      <span class="DoNotTranslate">add_punctuation</span>
    </li>
    <li>
      <span class="DoNotTranslate">alternate_graphic</span>
    </li>
  </ol>
  <p>Table1
    <span class="DoNotTranslate"><span class="ScreenElement">call_number</span></span>
  </p>
</table>

预期结果:

<p>Table0</p>
<p>Table1</p>

我尝试了下面的 Xpath,但它不起作用。

//p/node()[not (@class="DoNotTranslate")]

任何其他选择将不胜感激。

【问题讨论】:

【参考方案1】:

你可以通过使用任何一个来足够接近

//p/text()

//p/text()/normalize-space()

这些应该让你得到&lt;p&gt;elements 的文本,而不是它们的&lt;span&gt; 子元素:

Table0
Table1

【讨论】:

以上是关于Xpath:选择除具有特定属性的元素之外的所有元素的主要内容,如果未能解决你的问题,请参考以下文章

具有特定值的任何属性的所有元素的 XPath?

css 或 xpath 选择器:具有特定值的任何属性的元素

使用 XPath 匹配除一个之外的所有元素和文本

SimpleXML:选择具有特定属性值的元素

Xpath - 选择具有属性的元素并获取另一个属性值

xpath按元素和属性查找节点,其中包含具有特定id的子元素