选择所有文本节点的表达式是什么:
a
,script
或style
内答案 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的答案,但后来我偶然发现了主题首发所描述的问题:
不是
a
,style
或script
的后代
Dimitre的回答不包括style
标签,但包括其子女。
此版本还会将style
,script
,noscript
标记和排除在后代之外:
//div[@id='???']//*[not(ancestor-or-self::script or ancestor-or-self::noscript or ancestor-or-self::style)]/text()
无论如何,感谢Dimitre Novatchev。