使用 Xpath 检查 XML 中重复节点下的节点是否存在
Check existence of a node under a repeating node in XML using Xpath
我有以下 XML,
<Root>
<Node>
<Child>ch</Child>
<Child>ch1</Child>
</Node>
<Node>
<Child>ch2</Child>
<Child>ch3</Child>
</Node>
我想检查 XML 中的所有节点是否至少有一个 child 节点。
如果我使用 boolean(//Node/Child) 它将检查整个 XML 并且如果任何节点不这样做也不会抱怨。有一个 Child 节点。
如果我使用谓词来提及职位,它会起作用 -
boolean(//节点[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
可靠的 XPath-2.0 解决方案将使用这样的 quantified expression:
every $x in /Root/Node satisfies count($x/*)
这里使用的事实是 count(...)
函数的所有大于零的值都被解释为 TRUE。明确地说,它将是 count($x/*) > 0
.
我有以下 XML,
<Root>
<Node>
<Child>ch</Child>
<Child>ch1</Child>
</Node>
<Node>
<Child>ch2</Child>
<Child>ch3</Child>
</Node>
我想检查 XML 中的所有节点是否至少有一个 child 节点。 如果我使用 boolean(//Node/Child) 它将检查整个 XML 并且如果任何节点不这样做也不会抱怨。有一个 Child 节点。 如果我使用谓词来提及职位,它会起作用 - boolean(//节点[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
可靠的 XPath-2.0 解决方案将使用这样的 quantified expression:
every $x in /Root/Node satisfies count($x/*)
这里使用的事实是 count(...)
函数的所有大于零的值都被解释为 TRUE。明确地说,它将是 count($x/*) > 0
.