XSLT按公司分组后限制每组row节点最多出现3次的实现咨询
XSLT按公司分组并限制单组row节点数量实现
原有代码存在两个问题:
- 嵌套了按部门分组的逻辑,行数限制是作用在每个部门分组下,而非按公司分组的维度统计
- 行数判断条件
$Grpcounter < 3实际仅会输出前2条row,不符合最多3条的要求
修正后的完整代码如下:
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:decimal-format name="coerce" NaN="0"/> <xsl:template match="/root"> <root> <!-- 按公司字段分组row节点 --> <xsl:for-each-group select="row" group-by="Company"> <!-- 遍历当前公司分组下的row节点 --> <xsl:for-each select="current-group()"> <!-- 记录当前节点在分组内的位置 --> <xsl:variable name="Grpcounter" select="number(position())"/> <!-- 仅输出前3条row --> <xsl:if test="$Grpcounter <= 3"> <xsl:call-template name="Group"> </xsl:call-template> </xsl:if> </xsl:for-each> </xsl:for-each-group> </root> </xsl:template> <xsl:template name="Group"> <xsl:copy-of select="."/> </xsl:template> </xsl:stylesheet>
核心修改点说明
- 移除了不必要的按部门分组嵌套逻辑,直接在公司维度的分组内统计行数,确保限制的是每个公司下的row总数
- 将行数判断条件从
<3调整为<=3,实现单分组最多3条row的要求 - 保留了原有输出配置、节点复制逻辑,不影响其余已有业务规则
内容的提问来源于stack exchange,提问作者ASM
相关产品推荐
相关产品推荐

