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

XSLT按n个元素分组:每5个element包裹new标签的实现咨询

XSLT 按固定数量分组包裹元素实现方案

XSLT 2.0+ 版本(推荐)

XSLT 2.0 内置分组语法,实现逻辑更简洁易懂:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
    
    <xsl:template match="/*">
        <!-- 每5个element分为一组 -->
        <xsl:for-each-group select="element" group-by="(position() - 1) idiv 5">
            <new>
                <xsl:copy-of select="current-group()"/>
            </new>
        </xsl:for-each-group>
    </xsl:template>
</xsl:stylesheet>

说明:代码中的match="/*"会自动匹配输入XML的根节点,如果你的element元素不在根节点直接子级,修改select="element"为对应的实际路径即可。

XSLT 1.0 版本(兼容旧环境)

如果运行环境仅支持XSLT 1.0,可以使用位置筛选的方式实现:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
    <!-- 可自定义每组元素数量 -->
    <xsl:variable name="groupCount" select="5"/>

    <xsl:template match="/*">
        <!-- 选中每组的第一个element节点触发分组处理 -->
        <xsl:apply-templates select="element[position() mod $groupCount = 1]"/>
    </xsl:template>

    <xsl:template match="element">
        <new>
            <!-- 复制当前组的所有element节点 -->
            <xsl:copy-of select="self::element | following-sibling::element[position() < $groupCount]"/>
        </new>
    </xsl:template>
</xsl:stylesheet>

两个版本都可以直接适配你给出的输入示例,输出与你期望的结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:51:01