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

XSLT1.0复制节点新增QTY元素时遗漏节点问题如何修复

问题原因

XSLT 1.0 规范中,当多个模板的匹配优先级完全一致时,处理器只会选择最后声明的模板执行。你写了两个匹配SG26的模板优先级相同,所以始终只有最后一个新增E6063=60的模板生效,新增E6063=59的模板永远不会被触发。

修复方案

将两个新增QTY的逻辑合并到同一个SG26匹配模板中,分别判断对应值的QTY是否存在,不存在则插入对应节点:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxml="urn:schemas-microsoft-com:xslt" xmlns:ext="urn:ext" exclude-result-prefixes="ext msxml">
    <xsl:output method="xml" indent="yes" encoding="utf-8"/>
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="SG26">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
            <!-- 判断是否存在E6063=59的QTY,不存在则新增 -->
            <xsl:if test="not(QTY/C186/E6063=59)">
                <QTY>
                    <C186>
                        <E6063>59</E6063>
                        <E6060>status</E6060>
                        <E6411>status</E6411>
                    </C186>
                </QTY>
            </xsl:if>
            <!-- 判断是否存在E6063=60的QTY,不存在则新增 -->
            <xsl:if test="not(QTY/C186/E6063=60)">
                <QTY>
                    <C186>
                        <E6063>60</E6063>
                        <E6060>status2</E6060>
                        <E6411>status2</E6411>
                    </C186>
                </QTY>
            </xsl:if>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

该写法保留了原有的身份复制逻辑,所有原有节点都会完整保留,新增的QTY会追加到SG26节点的末尾,符合顺序无要求的需求。如果后续需要新增更多E6063值的QTY,只需要在同一个模板里追加对应的xsl:if判断即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:57:05