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

XSLT转换后命名空间前缀丢失,如何保留原有命名空间?

解决XSL转换后丢失XML命名空间的问题

你的问题出在使用了<xsl:copy>进行节点复制——这是浅拷贝,只会复制当前节点直接关联的命名空间,无法保留XML文档中定义但当前节点未直接使用的命名空间。要完整保留所有原有命名空间,需要在模板中显式复制所有命名空间节点。

修改后的完整XSL代码

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" encoding="utf-8" indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <!-- 显式复制所有命名空间节点 -->
            <xsl:copy-of select="namespace::*"/>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

关键说明

  • <xsl:copy-of select="namespace::*"/>:这条语句会复制当前节点上下文的所有命名空间节点,包括那些未被当前节点直接使用但在原文档中存在的命名空间声明,确保转换后的XML完全保留原文档的命名空间结构。
  • 原有的空行移除(<xsl:strip-space elements="*"/>)和输出格式化配置保持不变,依然可以实现你需要的移除空行、UTF-8编码输出的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:52:09