You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在XPath 2.0/3.0中获取Key节点唯一值及出现次数

问题描述

给定如下XML结构:

<Root>
    <Email>
        <Key> 1</Key>
    </Email>
    <Email>
        <Key> 1</Key>
    </Email>
    <Email>
        <Key> 2</Key>
    </Email>
    <Email>
        <Key> 2</Key>
    </Email>
    <Email>
        <Key> 3</Key>
    </Email>
</Root>

需要使用XPath 2.0或3.0提取Key节点的唯一值,并统计每个值的出现次数,最终输出格式为:1 (2 time), 2 (2 time), 3 (1 time)。

此前尝试string-join(distinct-values(//Key), ' ')仅能得到唯一值列表,无法包含次数统计,现寻求可行方案。

解决方案

XPath 2.0 实现

通过for循环遍历每个唯一值,结合count统计次数后拼接字符串,再用string-join组合结果:

string-join(
  for $val in distinct-values(//Key)
  return concat(normalize-space($val), ' (', count(//Key[normalize-space(.) = normalize-space($val)]), ' time)'),
  ', '
)
  • 使用normalize-space处理Key值,避免因前后空格导致匹配偏差
  • 循环中针对每个唯一值,统计所有匹配的Key节点数量,拼接成目标格式的片段
  • 最后用string-join将所有片段以, 分隔输出

XPath 3.0 实现

利用XPath 3.0新增的group-by分组函数,写法更简洁高效:

string-join(
  for $group in //Key!normalize-space(.) => group-by(.)
  return concat($group!key, ' (', count($group!*), ' time)'),
  ', '
)
  • 先提取所有Key值并去除前后空格
  • 通过group-by(.)按值分组
  • 对每个分组,直接获取分组键值和元素数量,拼接后用string-join组合输出

内容的提问来源于stack exchange,提问作者Ravi Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 10:20:22