我需要提取出现次数最多的那个元素的计数,例如在下面的xml中,我需要将计数返回为2,这是针对Email元素的。
<root>
<_1>
<attributes>
<Email>
<ov>true</ov>
<value>
<Email>
<ov>true</ov>
<value>abc@hghh.gff</value>
</Email>
</value>
</Email>
<Email>
<ov>true</ov>
<value>
<Email>
<ov>true</ov>
<value>xyn@qwe.com</value>
</Email>
</value>
</Email>
<UniqueId>
<ov>true</ov>
<value>39919741</value>
</UniqueId>
</attributes>
</_1>
</root>
答案 0 :(得分:1)
好吧,选择您感兴趣的元素,将它们按node-name()
分组,按count
进行分组,然后按降序排列第一个,或按升序排列最后一个,例如
for $element in outermost((//Email, //UniqueId))
group by $name := node-name($element)
order by count($element) descending
count $pos
where $pos = 1
return $name || ' : ' || count($element)
在示例输出Email : 2
上运行时。
答案 1 :(得分:0)
另一种方法是使用https://www.w3.org/TR/xpath-functions-31/#highest-lowest中的eg:highest()
高阶函数,然后将其应用于选定的节点$ E组,如下所示:
let $E := (:the selected elements:)
return eg:highest(distinct-values($E!node-name()),
function($n){count($E[node-name() eq $n])})
eg:highest($seq, $f)
函数是一种通用的高阶函数,可在$seq
中查找所提供函数$f
中具有最高值的项目。