我觉得我缺少一些基本知识,但我无法弄清楚;给定这个xml:
<p>
<tag>good text</tag>
<tag>this may be good </tag>
bad text
<tag>some other bad text</tag>
<tag>last good text</tag>
</p>
我想选择除文本节点(bad text
)和紧随其后的标记节点之外的所有内容。显然,优质标签和独立文本节点的数量各不相同,因此我不能依靠它们的绝对位置。
我知道
p/text()
选择bad text
和
//p/*
选择所有p
个孩子,但不包括bad text
。但是在此示例中,我无法弄清楚如何仅以第一个,第二个和第四个标签结尾。
所需的输出:
<p>
<tag>good text</tag>
<tag>this may be good</tag>
<tag>last good text</tag>
</p>
答案 0 :(得分:2)
此XPath 1.0表达式:
/p/*[not(preceding-sibling::node()[1][normalize-space(self::text())='bad text'])]
它选择:
<tag>good text</tag>
<tag>this may be good or bad</tag>
<tag>last good text</tag>
含义:
选择
p
的子元素不具有第一个在前节点的文本节点,该文本节点具有“不良文本”字符串作为空间归一化的字符串值。
检查:http://www.xpathtester.com/xpath/96aa0415f3512b0a84ad1e2330e0278f