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

如何用XSLT合并同一父节点下多个<reference>节点的子元素

这个需求完全可以通过XSLT实现,以下是可直接使用的实现方案:

实现原理

采用XSLT的「身份转换」作为基础逻辑:默认会原封不动复制所有节点、属性和文本内容,仅针对需要调整的reference节点做特殊处理,符合你「其余节点内容保持不变」的要求。

完整XSLT代码(兼容XSLT 1.0/2.0/3.0)

<?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>

    <!-- 处理payment节点的模板 -->
    <xsl:template match="payment">
        <xsl:copy>
            <!-- 先复制payment下所有非reference的子节点 -->
            <xsl:apply-templates select="@*|*[not(name()='reference')]"/>
            <!-- 新增一个合并后的reference节点 -->
            <reference>
                <!-- 把当前payment下所有reference的row子节点都复制进来 -->
                <xsl:apply-templates select="reference/row"/>
            </reference>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

使用说明

你可以用任意常见的XSLT处理器运行上述代码:

  • 桌面端工具:xsltproc、Saxon、XML Spy
  • 在线工具:可直接搜索在线XSLT转换工具,把源XML和上述XSLT代码粘贴进去即可生成目标结果

注:你提供的目标输出示例中第二个payment节点的remoteId位置发生了变化,如果你确实需要调整节点顺序,只需要修改上述payment模板里的节点选择顺序即可,当前代码默认保留源XML中除reference外所有节点的原有顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:36:08