xsl:for-each-group 是 XSLT 2.0+ 按条件分组的核心指令,需指定 select 和 group-by 属性,支持 group-adjacent、group-starting-with 等多种分组方式,并依赖 current-grouping-key()、current-group() 等函数获取上下文。
xsl:for-each-group 是 XSLT 2.0 及以上版本中用于按指定条件对节点分组的核心指令,它比 XSLT 1.0 中手动模拟分组(如 Muenchian 方法)更直观、简洁、可靠。
最简形式需指定两个关键属性:
//item)@category 或 substring(@date, 1, 4))例如,按商品类别分组:
除了 grou,XSLT 还支持更灵活的分组策略:
p-by
当作章节头,其后所有非 节点归入该组)group-starting-with 实现区间分组)在 xsl:for-each-group 内部,必须用这些函数获取分组上下文:
group-by 表达式的计算结果)current-group() 内有效,可用于标序号或判断首尾使用时需留意几点:
group-by 表达式结果会自动原子化(atomic),字符串比较默认区分大小写;如需忽略大小写,写成 upper-case(@category)
'' 或 empty())会被当作独立的一组,必要时用 normalize-space() 预处理基本上就这些。掌握 group-by + current-group() + current-grouping-key() 这个组合,就能覆盖绝大多数分组需求。