1

我有一个包含以下条目的 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

我需要的是每个唯一值的计数:在这种情况下,“1”为 7,“2”为 6。我如何实现这一目标?

4

2 回答 2

1

如果您使用与 XQuery 3.0 兼容的处理器(我使用BaseX进行了测试,请使用group byand count()

for $identifiers in file/unit/@id
let $id := substring($identifiers, 3, 1)
group by $id
return element { "count" } {
  attribute { "id" } { $id },
  count($identifiers)
}
于 2012-11-26T15:00:35.160 回答
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])
    }
于 2012-11-26T18:16:45.513 回答