使用XPath,如何获取不属于超链接的文本节点
我希望获取文档的所有文本节点,但仅获取不属于超链接的文本节点 测试样本:使用XPath,如何获取不属于超链接的文本节点,xpath,Xpath,我希望获取文档的所有文本节点,但仅获取不属于超链接的文本节点 测试样本: Hello <a class='foobar' href='foo.html'>foo</a>World Hello foo World 结果文本节点应包括包含Hello foo World的文本节点,但不包括超链接 我试过了//*[not@href]/文本,但这似乎不起作用 更新 正如我下面的回答所希望解释的,我的问题是查询查找的是根节点内部的节点,而不是根节点本身。我的答案如下 安德鲁想出了一
Hello <a class='foobar' href='foo.html'>foo</a>World Hello foo World
结果文本节点应包括包含Hello foo World的文本节点,但不包括超链接
我试过了//*[not@href]/文本,但这似乎不起作用
更新
正如我下面的回答所希望解释的,我的问题是查询查找的是根节点内部的节点,而不是根节点本身。我的答案如下
安德鲁想出了一个不同的方法,可能更清楚地表明了他的意图。好的,一个灯泡突然亮了起来。我想要任何节点中的文本,包括根节点。正确答案是:
//*[not(@href)]/text() | /text()
好的,一个灯泡亮了。我想要任何节点中的文本,包括根节点。正确答案是:
//*[not(@href)]/text() | /text()
你也可以排除父母,我认为这是你之前所想的,但你需要稍后再排除,在这种情况下,速记法似乎不起作用:
//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
你也可以排除父母,我认为这是你之前所想的,但你需要稍后再排除,在这种情况下,速记法似乎不起作用:
//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
使用:
这将选择不是元素后代的任何文本节点。使用:
这将选择不是a元素的后代的任何文本节点。+1 for xpath util,在回答此问题之前,我不知道它是否存在。非常感谢你!它在opensuse中的werken xpath包中,似乎来自-老实说,我之所以使用它,是因为我不能让saxon按照我想要的方式快速工作,opensuse将它列为xpath util的替代品…+1,直到这个答案我才知道它的存在。非常感谢你!它在opensuse中的werken xpath包中,似乎来自-老实说,我之所以使用它,是因为我不能让saxon按照我想要的方式快速工作,opensuse将它列为一种替代方案。。。