【问题标题】:XPath to select div with single child ignoring whitespace?XPath 选择带有单个子元素的 div 忽略空格?
【发布时间】:2013-03-12 14:34:16
【问题描述】:

我想找到不需要的嵌套 div 并通过查找只有一个元素的 div 来清理它们(忽略空白节点)。

<div>
    <div>Text in nested div</div>
</div>

到目前为止,我有以下 xpath 似乎可以部分工作。

//div[count(node()[normalize-space()]) = 1]

【问题讨论】:

  • 在什么情况下部分不起作用?

标签: html dom xpath


【解决方案1】:

请试一试:

//div[not(*[2]) and div and not(text()[normalize-space()])]

这应该选择具有单个子元素且没有非空白子文本节点的divs。

【讨论】:

  • 似乎只需要一个小改动就可以很好地选择子 div。 //div[count(*) = 1 and child::div and not(text()[normalize-space()])]
  • 优秀。需要注意的一件事是,在这种情况下,您不需要在 div 之前使用 child::。只需使用//div[count(*) = 1 and div and not(text()[normalize-space()])] 将完全一样,因为子轴是默认轴。
【解决方案2】:

使用这个简短而有效的表达方式

//div[*[1][self::div]][not(*[2]|text()[normalize-space()])]

【讨论】:

  • 那是什么意思?如果第一个元素是一个div,而第二个不存在或者是一个空元素?
  • @Xeoncross,这表示第一个子元素必须是 div 并且不应该有第二个子元素,并且不应该有任何非空白文本节点子元素.效率是子元素没有“计数,然后才与 1 比较”。想象一下有许多 divs 和数百个子元素......
  • not(*[2]|text()[normalize-space()]) 表示没有第二个元素或第二个元素为空(删除空格后)。
  • @Xeoncross:实际上没有。这意味着:没有第二个元素子元素,也没有任何包含任何非空白字符的文本节点子元素。 | 字符是 XPath 联合运算符。
猜你喜欢
  • 2020-07-04
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 2022-12-03
  • 1970-01-01
  • 2017-02-02
相关资源
最近更新 更多