我有一个包含以下条目的XML文件:
<file>
<unit id="u-1.01"/>
<unit id="u-1.02"/>
<unit id="u-1.03"/>
<unit id="u-1.04"/>
<unit id="u-1.05"/>
<unit id="u-1.06"/>
<unit id="u-1.07"/>
<unit id="u-2.01"/>
<unit id="u-2.02"/>
<unit id="u-2.03"/>
<unit id="u-2.04"/>
<unit id="u-2.05"/>
<unit id="u-2.06"/>
</file>
我们假设我使用substring函数选择 id 属性的第三个字符,并将其分配给变量 id :
for $identifiers in file/unit/@id
let $id := substring($identifiers, 3, 1)
return ($id)
返回以下内容:
1 1 1 1 1 1 1 2 2 2 2 2 2
我需要的是每个唯一值的计数:在这种情况下,7表示“1”,6表示“2”。我如何实现这一目标?
答案 0 :(得分:1)
如果您使用XQuery 3.0兼容处理器(我使用BaseX进行了测试),请使用group by
和count()
:
for $identifiers in file/unit/@id
let $id := substring($identifiers, 3, 1)
group by $id
return element { "count" } {
attribute { "id" } { $id },
count($identifiers)
}
答案 1 :(得分:1)
如果您的XQuery处理器不支持group by
,请获取所有唯一ID并自行计算。
let $ids := file/unit/@id/substring(., 3, 1)
return
for $uniqueID in distinct-values($ids)
return element { "count" } {
attribute { "id" } { $uniqueID },
count($ids[.=$uniqueID])
}