我有以下 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/