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

如何使用XSLT转换XML命名空间?能否实现指定XML格式转换?

使用XSLT进行XML命名空间转换的方法及示例

一、命名空间转换的核心思路

要完成XML命名空间的转换,核心要抓住这几点:

  • 在XSLT里正确绑定并匹配原命名空间下的元素(可以通过前缀绑定或者xpath-default-namespace属性)
  • 输出时指定目标命名空间,按需添加或保留其他必要的命名空间声明
  • 编写模板规则,完整复制原XML的元素、属性、文本等内容,只修改命名空间相关部分

二、针对你提供的XML的具体转换方案

下面是完全匹配你需求的XSLT实现,它会完成:

  1. 将原ns1前缀对应的命名空间(http://www.rof.com/schemas/)转换为rof前缀
  2. 修改输出XML的编码为ISO-8859-1
  3. 添加xsi命名空间声明(http://www.w3.org/2001/XMLSchema-instance)

原输入XML

<?xml version="1.0" encoding="UTF-8"?>
<ns1:Message xmlns:ns1="http://www.rof.com/schemas/">
  <Head Release="1.2.0" TransDate="2018-08-07T23:39:00" SplitLevel=""/>
  <Data>
    <Business BusinessId="ROF">
    </Business>
  </Data>
</ns1:Message>

转换用的XSLT代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:old-ns="http://www.rof.com/schemas/"
                xmlns:rof="http://www.rof.com/schemas/"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                exclude-result-prefixes="old-ns">

  <!-- 配置输出参数:指定编码、保留XML声明、开启缩进 -->
  <xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes"/>

  <!-- 匹配原根元素,转换为目标命名空间的根元素 -->
  <xsl:template match="old-ns:Message">
    <rof:Message>
      <!-- 复制所有需要保留的命名空间声明 -->
      <xsl:copy-of select="namespace::* | ../namespace::xsi"/>
      <!-- 处理根元素的属性和子节点 -->
      <xsl:apply-templates select="@* | node()"/>
    </rof:Message>
  </xsl:template>

  <!-- 匹配所有非命名空间绑定的元素,直接复制结构 -->
  <xsl:template match="*">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <!-- 复制所有属性 -->
  <xsl:template match="@*">
    <xsl:copy/>
  </xsl:template>

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

</xsl:stylesheet>

转换后的输出XML

<?xml version="1.0" encoding="ISO-8859-1"?>
<rof:Message xmlns:rof="http://www.rof.com/schemas/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Head Release="1.2.0" TransDate="2018-08-07T23:39:00" SplitLevel=""/>
  <Data>
    <Business BusinessId="ROF">
    </Business>
  </Data>
</rof:Message>

三、关键细节解释

  • 命名空间绑定:用old-ns绑定原命名空间,方便精准匹配原根元素;同时提前绑定目标rof和xsi命名空间,确保输出时自动包含这些声明。
  • exclude-result-prefixes:用来排除输出中不需要的前缀(比如这里的old-ns),避免生成冗余的命名空间声明。
  • 节点复制逻辑:通过不同的模板匹配元素、属性、文本等节点类型,保证原XML的结构和内容完全保留,只修改根元素的命名空间前缀和输出编码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:27:27