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

技术问询:用XSLT移除XML输出的默认命名空间并保留其他命名空间

移除XML默认命名空间并保留其他命名空间的XSLT方案

没问题,我来帮你搞定这个需求——移除XML里的默认命名空间http://apr,同时完整保留其他已有的命名空间。下面是具体的实现方案:

第一步:编写针对性的XSLT样式表

这个XSLT会遍历所有节点和属性,仅移除目标默认命名空间,其他内容原样保留:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:apr="http://apr"> <!-- 先声明要移除的默认命名空间,方便匹配 -->

  <!-- 复制所有节点,但处理命名空间 -->
  <xsl:template match="*">
    <xsl:choose>
      <!-- 如果是目标默认命名空间的节点,创建不带命名空间的新节点 -->
      <xsl:when test="namespace-uri() = 'http://apr'">
        <xsl:element name="{local-name()}">
          <xsl:apply-templates select="@* | node()"/>
        </xsl:element>
      </xsl:when>
      <!-- 其他命名空间的节点,原样复制(保留自身命名空间) -->
      <xsl:otherwise>
        <xsl:copy>
          <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <!-- 复制所有属性(包括其他命名空间的属性) -->
  <xsl:template match="@*">
    <xsl:copy/>
  </xsl:template>

  <!-- 复制文本、注释等节点 -->
  <xsl:template match="text() | comment() | processing-instruction()">
    <xsl:copy/>
  </xsl:template>

</xsl:stylesheet>

第二步:转换后的XML结果

用上面的XSLT处理你提供的示例XML后,会得到如下结果:

<p:Value xmlns:p="http://www.test.be/communication/xml/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.test/communication/xml/v2 sample.xsd ">
  <Data> Extra name space add using xslt need to remove this <Name>Apple</Name> </Data> 
</p:Value>

关键逻辑说明

  • 我们先在XSLT里声明了要移除的http://apr命名空间(前缀apr只是方便内部引用,不影响输出)
  • 匹配所有节点时,判断节点的命名空间是否为目标值:如果是,就用local-name()创建一个不带命名空间的新节点;否则直接复制原节点(保留其原有命名空间)
  • 属性、文本、注释等内容都直接复制,确保其他命名空间和数据完全保留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:55:06