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

xpath返回不是'a'、'style'或'script的后代的所有非空文本节点`,xpath,Xpath,哪个表达式将选择以下所有文本节点: 不空白 不是在一个文件、脚本或样式中? 假设不在内部,则表示文本节点不应是脚本或样式元素的后代。如果not inside only表示不应该是子级,则使用parent::a等代替祖先::a //text()[normalize-space() and not(ancestor::a | ancestor::script | ancestor::style)] 使用: 这个表达式不仅比当前公认答案中的表达式短,而且可能更有效 请注意,该表达式根本没有使用任何后

哪个表达式将选择以下所有文本节点:

不空白 不是在一个文件、脚本或样式中?
假设不在内部,则表示文本节点不应是脚本或样式元素的后代。如果not inside only表示不应该是子级,则使用parent::a等代替祖先::a

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

这个表达式不仅比当前公认答案中的表达式短,而且可能更有效


请注意,该表达式根本没有使用任何后退/后退轴。

我使用了Dimitre Novatchev的答案,但后来我偶然发现了主题启动程序描述的问题:

不是一种语言、风格或脚本的后代

Dimitre的回答排除了style标签,但包括了它的子项。 此版本还不包括样式、脚本、noscript标记及其子体:

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

无论如何,多亏了迪米特里·诺瓦切夫。

问得好,+1。请参阅我的答案,了解比当前接受的XPath表达式更短、更高效的XPath表达式:+谢谢。通过firebug测试,它确实缩短了获取节点所需的时间。@Majid:不客气。如果这比目前所接受的答案好,你可以考虑接受我的答案。我会对其他回答我的问题的人不粗鲁。先生,在NoDestType中做的是正常化的空间?TLDR:不选择非空节点。normalize space函数从字符串中去掉前导和尾随空格,用单个空格替换空格字符序列,并返回结果字符串。因此,如果节点只有空格,则返回空字符串,这意味着nodetest失败空字符串为false:并且省略了只包含空格的节点。+1没有尝试过,但根据您的描述,这是一种更可靠的方法。@warvariuc:您认为元素为什么可以有元素子元素?我搜索了这个-在这里你可以看到没有提到这样的语法:需要你的帮助-在/books/child::*和/books/child::node之间有什么区别吗?是否可能有条件//text[notancestor::a],但允许一些特定的单词列表?比如,如果链接在“家”这个词上,那么我们就保留它。还是完全荒谬?
//div[@id='???']//*[not(ancestor-or-self::script or ancestor-or-self::noscript or ancestor-or-self::style)]/text()