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

基于XSLT的for-each-group按RAPID_ID分组实现XML转换

XSLT按ID分组合并节点实现方案

实现思路

  • 采用XSLT 2.0及以上版本的for-each-group指令,以输入XML中的ID(即RAPID_ID)作为分组键,对所有节点执行分组
  • 每组外层的公共字段统一提取组内CustomerType='Primary'的记录对应值,保证公共信息一致性
  • 遍历同组内的所有节点,为每条记录单独生成子节点,写入对应明细字段

完整可运行XSLT代码

<?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="no"/>

    <xsl:template match="/">
        <Root>
            <!-- 按ID字段对所有Output节点分组 -->
            <xsl:for-each-group select="Root/Output" group-by="ID">
                <Output>
                    <!-- 定义变量获取组内主客户记录,用于提取公共字段 -->
                    <xsl:variable name="primaryRecord" select="current-group()[CustomerType='Primary'][1]"/>
                    <ID><xsl:value-of select="current-grouping-key()"/></ID>
                    <CustomerName><xsl:value-of select="$primaryRecord/CustomerName"/></CustomerName>
                    <BranchName><xsl:value-of select="$primaryRecord/BranchName"/></BranchName>
                    <SchemeName><xsl:value-of select="$primaryRecord/SchemeName"/></SchemeName>
                    <MobileNumber><xsl:value-of select="$primaryRecord/MobileNumber"/></MobileNumber>
                    <!-- 遍历组内所有记录生成去重明细节点 -->
                    <xsl:for-each select="current-group()">
                        <DedupeDetails>
                            <CustomerType><xsl:value-of select="CustomerType"/></CustomerType>
                            <CustomerName><xsl:value-of select="CustomerName"/></CustomerName>
                            <DedupeFound><xsl:value-of select="DedupeFound"/></DedupeFound>
                        </DedupeDetails>
                    </xsl:for-each>
                </Output>
            </xsl:for-each-group>
        </Root>
    </xsl:template>
</xsl:stylesheet>

关键逻辑说明

  • group-by="ID":指定分组的唯一键为输入中的ID字段,符合RAPID_ID分组的需求
  • current-grouping-key():直接获取当前分组的ID值,避免重复读取节点字段带来的冗余
  • $primaryRecord变量:固定取组内第一条主客户记录的公共字段,避免同组内公共字段取值冲突
  • 内层current-group()遍历:完整输出组内所有记录的明细字段,不会遗漏任意一条原始记录

注意事项

  • 代码基于XSLT 2.0版本开发,需要使用支持XSLT 2.0的解析器运行(如Saxon 9及以上版本)
  • 如果输入中可能出现同组无Primary客户的情况,可以按需调整$primaryRecord的取值逻辑,比如默认取组内第一条记录的对应字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:54:04