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

使用XSLT 1.0将XML分组转换为指定格式以便后续生成JSON

XSLT 1.0 实现分组转换解决方案

XSLT 1.0 无内置distinct-values函数,可使用Muenchian分组法实现按交易伙伴ID去重分组,这是XSLT 1.0场景下处理这类需求的标准方案。

可直接使用的转换脚本

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <!-- 定义分组键:按RegInfo下的tradingPartnerId值分组 -->
    <xsl:key name="partnerKey" match="RegInfo" use="tradingPartnerId"/>

    <xsl:template match="/RegResults">
        <!-- 筛选所有不重复的tradingPartnerId对应的RegInfo节点 -->
        <xsl:for-each select="RegInfo[count(. | key('partnerKey', tradingPartnerId)[1]) = 1]">
            <!-- 输出当前交易伙伴ID -->
            <tradingPartnerId>
                <xsl:value-of select="tradingPartnerId"/>
            </tradingPartnerId>
            <!-- 遍历当前交易伙伴对应的所有交易代码 -->
            <xsl:for-each select="key('partnerKey', tradingPartnerId)">
                <ediTransactionCode>
                    <xsl:value-of select="ediTransactionCode"/>
                </ediTransactionCode>
            </xsl:for-each>
        </xsl:for-each>
    </xsl:template>

    <!-- 配置输出格式,自动缩进、省略XML声明 -->
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
</xsl:stylesheet>

转换结果验证

使用你提供的源XML执行上述脚本,输出结果完全匹配要求的结构:

<tradingPartnerId>12345</tradingPartnerId>
<ediTransactionCode>204</ediTransactionCode>
<ediTransactionCode>214</ediTransactionCode>
<tradingPartnerId>23456</tradingPartnerId>
<ediTransactionCode>204</ediTransactionCode>
<ediTransactionCode>214</ediTransactionCode>

可选优化建议

如果后续转JSON的服务支持更规范的XML结构,建议给输出加个外层根节点(比如<PartnerList>),可以避免后续转换JSON时出现同名根键冲突的问题,调整方法仅需要在模板中加一层根元素即可。

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

相关产品推荐
方舟 Agent Plan

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

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