xml - 使用 Xpath 检查 XML 中重复节点下的节点是否存在

标签 xml xpath xpath-2.0

我有以下 XML,

<Root>
  <Node>
    <Child>ch</Child>
    <Child>ch1</Child>
  </Node>

  <Node>
    <Child>ch2</Child>
    <Child>ch3</Child>
  </Node>

我想检查 XML 中的所有节点是否至少有一个子节点。 如果我使用 boolean(//Node/Child) ,它将检查整个 XML,并且如果任何 Node 不这样做,也不会提示。有一个子节点。 如果我使用谓词来提及该位置,它会起作用 - boolean(//Node[1]/Child).

谢谢 菅田

最佳答案

可以通过计算 Nodes 来实现与 Child计数为零

not(count(//Node[count(Child) = 0]) > 0)

给定

<Root>
  <Node>
    <Child>ch</Child>
    <Child>ch1</Child>
  </Node>

  <Node>
    <Child>ch2</Child>
    <Child>ch3</Child>
  </Node>
  <Node/>
</Root>

测试失败,有空Node元素。换句话说,空元素的数量大于零。

xmllint --xpath 'not(count(//Node[count(Child) = 0]) > 0)' test.xml; echo
false

正在删除 <Node/>

xmllint --xpath 'not(count(//Node[count(Child) = 0]) > 0)' test.xml; echo
true

如果存在2个空节点

xmllint --xpath 'count(//Node[count(Child) = 0])' test.xml; echo
2

关于xml - 使用 Xpath 检查 XML 中重复节点下的节点是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72092158/

相关文章:

java - 在 SQL 中编写一个存储过程来存储 XML 是一个好主意吗?

Python 命令行单行使用 xmltodict 将 XML 转换为 JSON

HTML XPath 按类和文本搜索

Android:ListView 中的页脚

java - 序列化没有 jaxb 注释的基类

xml - XSLT Concat 字段在一起

xpath - 在 Google 工作表中创建函数以获取我的外部 IP 地址

xml - 帮助将 xpath 结果转换为格式化字符串

xslt - 在 XPath 2.0 中表达集合相等的惯用方式

xslt - 如何根据变量或参数查找元素是否具有祖先(XPath 2.0)