我想获取文档的所有文本节点,但只能获取不属于超链接的文本节点。
测试样本:
Hello <a class='foobar' href='foo.html'>foo</a>World Hello foo World
结果文本节点应包含带有Hello foo World的文本节点,但不包括超链接。
我尝试了"//*[not(@href)]/text()"
,但这似乎不起作用。
更新
正如我的答案(希望)解释的那样,我的问题是查询是在根节点内寻找节点,而不是根节点本身。我的答案如下。
安德鲁提出了一种不同的方法,可能更明确意图。
答案 0 :(得分:3)
你也可以排除父母(我认为你之前想到的是什么?),但是你需要稍后进行排除(并且简写符号在这种情况下似乎不起作用):
//text()[not(parent::a)]
例如:
> cat foo.xml
<b>
<a href="href">baz</a>
text
<c>foo<a href="href">bar</a>here</c>
more
</b>
> xpath foo.xml "//text()[not(parent::a)]"
Found 5 nodes:
-- NODE --
-- NODE --
text
-- NODE --
foo-- NODE --
here-- NODE --
more
答案 1 :(得分:2)
//*[not(@href)]/text() | /text()
答案 2 :(得分:1)
使用强>:
//text()[not(ancestor::a)]
这将选择不是a
元素的后代的任何文本节点。