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

如何在group-by分组中为每个唯一分组生成序列编号

按分组生成序列编号的实现方案

针对给定的经销商车辆XML数据,我们可以用XSLT实现按Series分组并为每个唯一分组生成3位序列编号的需求,具体实现如下:

输入XML数据

<Dealer>
    <Vehicle>
        <Model>KA</Model>
        <Series>Type A</Series>
        <Price>1000.00</Price>
    </Vehicle>
    <Vehicle>
        <Model>KA</Model>
        <Series>Type A</Series>
        <Price>1400.00</Price>
    </Vehicle>
    <Vehicle>
        <Model>KA</Model>
        <Series>Type C</Series>
        <Price>1100.00</Price>
    </Vehicle>
    <Vehicle>
        <Model>FOCUS</Model>
        <Series>Type C</Series>
        <Price>5000.00</Price>
    </Vehicle>
    <Vehicle>
        <Model>FIESTA</Model>
        <Series>Type B</Series>
        <Price>6000.00</Price>
    </Vehicle>
</Dealer>

实现用的XSLT代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" encoding="UTF-8"/>
    
    <!-- 定义分组键:按Series的值分组 -->
    <xsl:key name="series-group" match="Vehicle" use="Series"/>
    
    <xsl:template match="/Dealer">
        <!-- 遍历所有唯一的Series分组 -->
        <xsl:for-each select="Vehicle[generate-id() = generate-id(key('series-group', Series)[1])]">
            <!-- 获取当前分组的序列编号,格式化为3位带前导零 -->
            <xsl:variable name="group-number" select="format-number(position(), '000')"/>
            
            <!-- 遍历当前分组下的所有Vehicle节点 -->
            <xsl:for-each select="key('series-group', Series)">
                <xsl:value-of select="Model"/>
                <xsl:text> </xsl:text>
                <xsl:value-of select="Series"/>
                <xsl:text> </xsl:text>
                <xsl:value-of select="Price"/>
                <xsl:text> </xsl:text>
                <xsl:value-of select="$group-number"/>
                <xsl:text>&#10;</xsl:text>
            </xsl:for-each>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

输出结果

KA Type A 1000.00 001
KA Type A 1400.00 001
KA Type C 1100.00 002
FOCUS Type C 5000.00 002
FIESTA Type B 6000.00 003

关键步骤说明

  • 分组定义:通过<xsl:key>创建基于Series值的分组键,把所有同Series的Vehicle归为一组。
  • 唯一分组筛选:用generate-id()判断当前Vehicle是否是对应分组的第一个节点,以此筛选出所有唯一的Series分组。
  • 序列编号生成:用position()获取分组的顺序号,再通过format-number()把编号格式化为3位带前导零的字符串(比如1变成001)。
  • 分组内遍历输出:对每个唯一分组,遍历其下所有Vehicle节点,拼接Model、Series、Price和分组编号,输出为文本行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:32:05