xpath返回所有非空文本节点,而不是`a`,`style`或`script`的后代

时间:2010-12-07 15:42:43

标签: xpath

选择所有文本节点的表达式是什么:

  • 空白
  • ascriptstyle

3 个答案:

答案 0 :(得分:16)

这应该这样做,假设“not inside”意味着文本节点不应该是“a”或“script”或“style”元素的后代。如果“not inside”仅表示不应该是孩子,那么使用parent :: a等而不是祖先:: a。

//text()[normalize-space() and not(ancestor::a | ancestor::script | ancestor::style)]

答案 1 :(得分:16)

使用

//*[not(self::a or self::script or self::style)]/text()[normalize-space()]

此表达式不仅短于当前接受答案中的表达式,而且效率更高

请注意,表达式根本不使用任何(向后/向上)轴。

答案 2 :(得分:3)

我使用了Dimitre Novatchev的答案,但后来我偶然发现了主题首发所描述的问题:

  

不是astylescript后代

Dimitre的回答不包括style标签,但包括其子女。 此版本还会将stylescriptnoscript标记排除在后代之外:

//div[@id='???']//*[not(ancestor-or-self::script or ancestor-or-self::noscript or ancestor-or-self::style)]/text()

无论如何,感谢Dimitre Novatchev。