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

求助:使用XSLT 1.0重命名XML中<add-attr>节点为<attr>无输出问题排查

问题分析与解决方案

首先,你的XSLT代码无法产生输出的核心原因是缺少必要的XSLT根声明,另外还有一个多余的模板。让我们一步步拆解问题:

你的代码存在的问题

  • 没有<xsl:stylesheet>根元素及必要的命名空间和版本声明:XSLT处理器需要这个根元素来识别这是一个有效的XSLT文件,缺少它的话处理器根本无法解析你的代码。
  • 多余的<xsl:template match="@add-attr">模板:@add-attr匹配的是名为add-attr的属性,但你的XML里只有<add-attr>元素,没有这样的属性,这个模板永远不会被触发,完全没必要保留。
  • 虽然match="//add-attr"是有效的,但直接match="add-attr"更简洁,因为身份模板会递归处理所有节点,不需要绝对路径。

修正后的XSLT 1.0代码

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

    <!-- 匹配所有add-attr元素,将其重命名为attr -->
    <xsl:template match="add-attr">
        <attr>
            <xsl:apply-templates select="@*|node()"/>
        </attr>
    </xsl:template>
</xsl:stylesheet>

代码说明

  1. 身份模板:这是XSLT中最基础的模板,负责复制所有没有被专门模板匹配的节点(包括元素、文本、属性等),保证XML结构的其余部分保持不变。
  2. 重命名模板:专门匹配<add-attr>元素,当遇到它时,会创建一个新的<attr>元素,然后把原元素的所有属性和子节点都复制到这个新元素里,完美实现你的需求。

用这个代码处理你的输入XML,就能得到你期望的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 17:02:48