current-group() 返回当前分组的节点序列,顺序与输入一致;只能在 xsl:for-each-group 内使用,常配合 count()、current-grouping-key() 等实现分组聚合与嵌套处理。

current-group() 是 XSLT 2.0+(及 XPath 2.0+)中 xsl:for-each-group 内部专用函数,**只能在 xsl:for-each-group 的作用域内使用**,用于获取当前正在处理的这个分组所包含的所有节点(即“这一组”的全部项目)。
它返回什么?
返回一个节点序列(node sequence),顺序与原始输入中这些节点出现的顺序一致。注意:不是字符串、不是单个节点,而是**一组节点** —— 所以你可以对它用 count()、position()、for-each,甚至嵌套 xsl:for-each-group 再分组。
怎么用?常见写法
典型结构如下:
关键注意事项
- 不能在
xsl:for-each-group外调用 —— 否则报错或返回空序列 - 不等于
.或current():.是当前上下文节点(通常是分组里的第一个节点),而current-group()是整个组 - 如果想取组内第一个/最后一个节点,写
current-group()[1]或current-group()[last()] - 配合
current-grouping-key()使用最常见 —— 前者是“这组的值”,后者是“这组的内容”
小技巧:过滤或变换当前组
你可以在 current-group() 上直接加谓词或函数:
-
current-group()[price > 100]—— 取本组中价格超百的项 -
current-group()/@id—— 提取本组所有项目的 id 属性值序列 -
String-join(current-group()/name, ', ')—— 把本组所有 name 拼成逗号串
基本上就这些。记住:它是分组时的“组内视图”,用对了能让聚合、汇总、嵌套列表变得非常简洁。