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

如何移除XSLT转换输出中的xmlns=""命名空间声明?

解决XML转换中的空命名空间声明问题

问题根源

你的XSLT里,根节点<ORDERRESPONSE>被放到了http://www.opentrans.org/XMLSchema/2.1命名空间,但处理其他元素的通用模板只创建了无命名空间的元素——因为<xsl:element>没指定namespace属性。父节点在目标命名空间,子元素要保持无命名空间就会自动加上xmlns="",这就是问题所在。

修复方案

修改通用元素模板,让所有子元素都使用目标命名空间,两种方法可选:

方法1:直接指定命名空间

在创建元素时显式写入目标命名空间:

<xsl:element name="{local-name()}" namespace="http://www.opentrans.org/XMLSchema/2.1">
  <xsl:apply-templates select="@* | node()"/>
</xsl:element>

方法2:继承父节点命名空间

通过父节点的命名空间URI动态指定:

<xsl:element name="{local-name()}" namespace="{namespace-uri(..)}">
  <xsl:apply-templates select="@* | node()"/>
</xsl:element>

完整修改后的XSLT

<?xml version="1.0"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
 
<xsl:template match="ORDERRESPONSE">
     <ORDERRESPONSE xmlns="http://www.opentrans.org/XMLSchema/2.1"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             Version="2.1">
        <xsl:apply-templates/>
    </ORDERRESPONSE>
</xsl:template>

<xsl:template match="*">    
<xsl:element name="{local-name()}" namespace="http://www.opentrans.org/XMLSchema/2.1">
      <xsl:apply-templates select="@* | node()"/>
    </xsl:element>  
</xsl:template>

<xsl:template match="@*">    
<xsl:attribute name="{local-name()}"> 
    <xsl:value-of select="."/>
    </xsl:attribute>  
</xsl:template> 
<xsl:template match="comment() | text() | processing-instruction()"> 
<xsl:copy copy-namespaces="no"/>
</xsl:template>

</xsl:stylesheet>

输出验证

用上面的XSLT转换你的输入XML,就能得到符合预期的结果,子元素不会再带xmlns=""声明:

<?xml version="1.0" encoding="utf-8"?>
<ORDERRESPONSE Version="2.1" xmlns="http://www.opentrans.org/XMLSchema/2.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ORDERRESPONSE_HEADER>
    <ORDERRESPONSE_INFO>
      <ORDER_ID>65913603</ORDER_ID>
      <ORDERRESPONSE_DATE>2022-06-03</ORDERRESPONSE_DATE>
      <SUPPLIER_ORDER_ID>800332043</SUPPLIER_ORDER_ID>
    </ORDERRESPONSE_INFO>
  </ORDERRESPONSE_HEADER>
</ORDERRESPONSE>

内容的提问来源于stack exchange,提问作者Jesper Bloch-Hansen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:15:40