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

XSLT多GS9场景下保留每个GS9最后一个GS15的问题排查

问题排查与解决方案

问题根源

  1. 原代码里的//GS15[last()]是选取整个文档中最后一个GS15节点,而非当前GS9节点下的最后一个GS15,导致多GS9场景下只有最后一个GS9里的最后一个GS15被保留,其他GS9内的GS15全被删除。
  2. 错误地将保留的GS15节点重命名为G_SG15,不符合输出要求。
  3. 定义的gs15key未被使用,属于冗余代码。

修正后的XSLT代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <!-- 身份模板:默认复制所有节点和属性 -->
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 处理GS9节点:保留所有子节点,仅保留最后一个GS15 -->
    <xsl:template match="GS9">
        <xsl:copy>
            <!-- 复制GS9下除GS15外的所有子节点 -->
            <xsl:apply-templates select="node()[not(self::GS15)]"/>
            <!-- 如果存在GS15节点,复制最后一个 -->
            <xsl:if test="GS15">
                <xsl:apply-templates select="GS15[last()]"/>
            </xsl:if>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

代码说明

  • 保留核心的身份模板,确保所有未被特殊处理的节点和属性都原样复制。
  • 针对GS9节点单独处理:先复制除GS15外的所有子节点,再检查当前GS9下是否存在GS15,如果存在则仅复制最后一个。
  • 完全符合需求规则:单个GS15/无GS15的GS9原样保留,多GS15的GS9只留最后一个,非GS9节点不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 15:37:02