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

如何使用XSLT按逗号拆分XML元素值并生成独立XML结构?

解决方案:拆分XML中逗号分隔元素生成独立结构

要实现将XML中单个元素内的逗号分隔值拆分,并生成对应独立的XML节点结构,使用XSLT 2.0是最直接的方案,以下是具体实现:

完整XSLT转换代码

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:ns="http://sap.com/xi/SAPGlobal20/Global">
    <!-- 身份模板:复制所有未被特殊匹配的节点/属性 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 匹配需要拆分的SalesProcessInformation节点 -->
    <xsl:template match="SalesProcessInformation">
        <!-- 拆分销售组织ID,过滤空值(处理末尾逗号) -->
        <xsl:variable name="salesOrgIds" select="tokenize(SalesOrganisationID, ',')[normalize-space() != '']"/>
        <!-- 拆分生命周期状态码,过滤空值 -->
        <xsl:variable name="statusCodes" select="tokenize(LifeCycleStatusCode, ',')[normalize-space() != '']"/>
        
        <!-- 遍历每个拆分后的条目,生成独立的SalesProcessInformation节点 -->
        <xsl:for-each select="1 to count($salesOrgIds)">
            <xsl:variable name="pos" select="position()"/>
            <SalesProcessInformation>
                <!-- 复制除目标元素外的所有子节点 -->
                <xsl:apply-templates select="*[not(self::SalesOrganisationID or self::LifeCycleStatusCode)]"/>
                <!-- 插入对应位置的销售组织ID -->
                <SalesOrganisationID>
                    <xsl:value-of select="$salesOrgIds[$pos]"/>
                </SalesOrganisationID>
                <!-- 插入对应位置的生命周期状态码 -->
                <LifeCycleStatusCode>
                    <xsl:value-of select="$statusCodes[$pos]"/>
                </LifeCycleStatusCode>
            </SalesProcessInformation>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

关键逻辑说明

  1. 身份模板:确保XML中不需要修改的节点(如外层结构、其他固定属性/元素)完全复制,保留原有XML的结构完整性。
  2. 值拆分处理:使用tokenize()函数按逗号分割目标元素的文本值,同时通过[normalize-space() != '']过滤掉末尾逗号产生的空字符串,避免生成无效的空节点。
  3. 节点生成:遍历拆分后的数组长度,为每个索引位置生成独立的SalesProcessInformation节点:
    • 先复制该节点下除SalesOrganisationID和LifeCycleStatusCode外的所有子元素(保持固定字段不变);
    • 再插入对应索引位置的拆分后值,保证两个字段的条目一一对应。

使用方式

将上述XSLT代码保存为.xsl文件,使用支持XSLT 2.0的工具(如Saxon、Altova XMLSpy)或在线XSLT转换器,将输入XML与该XSLT文件进行转换,即可得到期望的输出结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:46:47