xpath - 如何排除文本节点周围的节点?

标签 xpath

我觉得我缺少一些基本的东西,但是我无法弄清楚。给定这个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>

最佳答案

此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

关于xpath - 如何排除文本节点周围的节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57101363/

相关文章:

java - 单个 XSLT 文件能否解决这个问题 - 继续..?

c# - XPath 查询中的撇号 (')

xml - Google 表格的 IMPORTXML XPath_Query

php - php xpath查询以基于重复子节点中的值获取父节点

xpath - 从节点中选择文本并省略子节点

java - 在 XML 节点中查找模式的最快(实现)方式

xml - 规范的 xpath 问题?

selenium - MS Edge 是否有功能齐全的 Selenium WebDriver?

c# - 在 C# 中读取 xml Xpath() 命令时如何控制项目计数?

php - XPath 一次选择多个元素?