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

使用XSLT 2.0重构XML层级:合并多Partner下的Header/Item

合并XML中多个Partner节点下的Header到单个自定义Partner节点

方案1:使用XSLT(XML样式表转换)

XSLT是处理XML结构重排的原生方案,你可以编写以下样式表,将所有Header节点归集到指定partnerId的Partner节点中:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 复制所有节点和属性,除非有特殊匹配规则 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 匹配isaPartners节点,替换为包含单个自定义Partner的结构 -->
    <xsl:template match="isaPartners">
        <isaPartners>
            <!-- 自定义partnerId,这里设置为PartnerD,可自行修改 -->
            <Partner partnerId="PartnerD">
                <!-- 提取所有Partner下的Header节点 -->
                <xsl:apply-templates select="//Partner/Header"/>
            </Partner>
        </isaPartners>
    </xsl:template>
</xsl:stylesheet>

使用方式:将上述XSLT保存为merge-partners.xsl,然后用XSLT处理器(如Saxon、libxslt)执行转换,命令示例:

xsltproc merge-partners.xsl input.xml > output.xml

方案2:使用Python ElementTree脚本

如果你熟悉Python,可以用内置的xml.etree.ElementTree库实现,代码逻辑清晰易修改:

import xml.etree.ElementTree as ET

# 解析输入XML
tree = ET.parse('input.xml')
root = tree.getroot()

# 获取所有Header节点
all_headers = root.findall('.//Partner/Header')

# 找到isaPartners节点并清空原有内容
isa_partners = root.find('isaPartners')
for partner in list(isa_partners):
    isa_partners.remove(partner)

# 创建新的Partner节点,设置自定义partnerId
new_partner = ET.Element('Partner', {'partnerId': 'PartnerD'})
# 添加所有Header到新Partner下
for header in all_headers:
    new_partner.append(header)

# 将新Partner加入isaPartners
isa_partners.append(new_partner)

# 保存输出XML
tree.write('output.xml', encoding='UTF-8', xml_declaration=True)

说明

  • 两个方案都支持修改partnerId的值,替换代码中对应的字符串即可
  • XSLT方案无需编写脚本,适合纯XML生态的场景;Python方案更灵活,可扩展其他逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:17:23