rit*_*ond 4 xml xquery count distinct-values
我有一个包含以下元素和属性的XML文件:
<element>
<unit id="1" color="blue"/>
<unit id="2" color="blue"/>
<unit id="3" color="red"/>
</element>
Run Code Online (Sandbox Code Playgroud)
我如何计算1)每种属性颜色的不同出现次数和2)每次不同事件的计数?
到目前为止,我已经尝试了distinct-values()和count()以及它们的组合,没有运气,以不同属性的数量或它们的数量结束,尽管我想得到两者.
我想得到的结果列表如下所示:
Blue 2
Red 1
Run Code Online (Sandbox Code Playgroud)
此查询应该执行您想要的操作:
let $input :=
<element>
<unit id="1" color="blue"/>
<unit id="2" color="blue"/>
<unit id="3" color="red"/>
</element>
return
for $value in distinct-values($input/unit/@color)
let $count := count($input/unit[@color eq $value])
order by $count descending
return concat($value," ",$count)
Run Code Online (Sandbox Code Playgroud)
这在MarkLogic中为我生成以下输出:
blue 2
red 1
Run Code Online (Sandbox Code Playgroud)
更新:我修改了查询,因此它按计数值对结果进行排序.
这只是一个看起来更短的 XPath 2,0 表达式:
for $v in distinct-values(/*/*/@color)
return
($v, count(index-of(/*/*/@color, $v)), '
')
Run Code Online (Sandbox Code Playgroud)
当针对提供的 XML 文档评估此 XPath 表达式时:
<element>
<unit id="1" color="blue"/>
<unit id="2" color="blue"/>
<unit id="3" color="red"/>
</element>
Run Code Online (Sandbox Code Playgroud)
产生了想要的、正确的结果:
blue 2
red 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9674 次 |
| 最近记录: |