group-by - XSLT 按“n”次分组然后复制子节点
问题描述
我需要对公司进行分组,并且新节点组中节点行可以出现的最大数量为 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>
<!--Group by fields, can only group by 1 element each time-->
<xsl:for-each-group select="row" group-by="Company">
<xsl:for-each-group select="current-group()" group-by="Department">
<xsl:for-each select="current-group()">
<!--Create a variable for the row count-->
<xsl:variable name="Grpcounter" select="number(position())"/>
<xsl:if test="$Grpcounter < 3">
<xsl:call-template name="Group">
</xsl:call-template>
</xsl:if>
</xsl:for-each>
</xsl:for-each-group>
</xsl:for-each-group>
</root>
</xsl:template>
<xsl:template name="Group">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:样式表>
解决方案
您能否按如下方式更新您的 xslt:
替换: <xsl:template match="/root"> . . . </xsl:template>
用
<xsl:template match="/root">
<xsl:variable name="grouped">
<!--Group by fields, can only group by 1 element each time-->
<xsl:for-each-group select="row" group-by="Company">
<!--<xsl:for-each-group select="current-group()" group-by="Department">-->
<xsl:for-each select="current-group()">
<xsl:choose>
<xsl:when test="position() mod 3 = 1">
<Group>
<xsl:call-template name="Group"/>
</Group>
</xsl:when>
<xsl:otherwise>
<Group1>
<xsl:call-template name="Group"/>
</Group1>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
<!--</xsl:for-each-group>-->
</xsl:for-each-group>
</xsl:variable>
<root>
<xsl:for-each-group select="$grouped/*" group-starting-with="Group">
<Group>
<xsl:copy-of select="current-group()/row"/>
</Group>
</xsl:for-each-group>
</root>
</xsl:template>
获得预期的输出。查看结果
推荐阅读
- php - 在 PrestaShop 中更改价格计算
- pine-script - TradingView - 用于退出策略的 pine 脚本
- javascript - 构造函数中的“this”关键字是否引用了类实例的名称?
- webapi - 是否可以从域层抛出异常,导致 dotnet core webApi 中返回 403 响应?
- python - 自定义用户 PK(主键) - Django - Python
- python-3.x - scipy k-means算法不使用所有k
- python - 如何从他的多对多关系中选择包含某些孩子的父母?
- heroku - 重复后 Tweepy Bot 崩溃
- elasticsearch - 千分尺与公制节拍
- javascript - Javascript 正则表达式未显示与 Python 中相同的结果