如何用XQuery检测XML中<element>是否存在重复冲突?
XQuery实现:验证相同
<a>值对应<b>值一致性 我来帮你写一个完全符合需求的XQuery查询,核心思路是按<a>的值分组,然后检查每组内的<b>值是否完全一致。
核心逻辑
- 把所有
<element>节点按<a>的内容分组(包括<a>为空的情况) - 对每个分组,验证组内所有
<b>的值是否完全相同 - 如果所有分组都通过验证,返回
True;只要有一个分组不满足,返回False
完整XQuery代码
let $elements := //element let $groups := $elements group by $a := $elements/a/text() return if (every $group in $groups satisfies every $b in $group/b/text() satisfies $b eq $group/b/text()[1]) then "True" else "False"
代码说明
let $elements := //element:获取XML文档中所有的<element>节点group by $a := $elements/a/text():按<a>的文本内容分组,空<a>会被自动归为同一组every $group in $groups satisfies ...:遍历每个分组,逐一检查分组内的一致性条件every $b in $group/b/text() satisfies $b eq $group/b/text()[1]:验证当前分组里所有<b>的文本内容,都和组内第一个<b>的文本完全一致
示例验证
示例1(应返回True)
<root> <element><a>ttt</a><b>tttsame</b></element> <element><a>ttt</a><b>tttsame</b></element> <element><a/><b>value</b></element> <element><a>rrr</a><b>rrrvalue</b></element> <element><a>mmm</a><b>rrrvalue</b></element> <element><a>mmm</a><b>rrrvalue</b></element> </root>
- 分组检查结果:
a="ttt"组:所有<b>值均为tttsame,符合条件a=""组:仅一个元素,自动符合条件a="rrr"组:仅一个元素,自动符合条件a="mmm"组:所有<b>值均为rrrvalue,符合条件
- 最终返回
True
示例2(应返回False)
<root> <element><a>ttt</a><b>ttt value</b></element> <element><a>ttt</a><b>ttrdiff</b></element> <element><a/><b>value</b></element> <element><a>mmm</a><b>rrrvalue</b></element> </root>
a="ttt"组内的两个<b>值分别为ttt value和ttrdiff,明显不一致,触发返回False
内容的提问来源于stack exchange,提问作者fahi
相关产品推荐
相关产品推荐

