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

XSLT转换问题:为现有元素添加节点时的命名空间异常处理

XSLT转换时解决命名空间变更及节点添加问题

你的XSLT出现多余命名空间的核心原因有两点:

  • 匹配faia:Contact的模板使用<xsl:copy>,直接保留了原节点的旧命名空间(urn:StandardAuditFile-Taxation-Financial:DK),未转换为目标命名空间。
  • 新增的<Telephone>节点未指定目标命名空间,导致继承上下文的空命名空间,引发命名空间冲突。

以下是修正后的XSLT代码:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
                xmlns:faia="urn:StandardAuditFile-Taxation-Financial:DK"
                exclude-result-prefixes="faia">

  <!-- 统一管理目标命名空间 -->
  <xsl:variable name="target-ns" select="'urn:OECD:StandardAuditFile-Taxation/2.00'"/>

  <!-- 默认模板:将所有元素转换到目标命名空间 -->
  <xsl:template match="*">
    <xsl:element name="{local-name()}" namespace="{$target-ns}">
      <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="text() | comment() | processing-instruction()">
    <xsl:copy/>
  </xsl:template>

  <!-- 处理Contact节点:创建目标命名空间的节点并添加Telephone -->
  <xsl:template match="faia:Contact">
    <xsl:element name="Contact" namespace="{$target-ns}">
      <xsl:apply-templates select="@* | node()"/>
      <!-- 添加目标命名空间下的Telephone节点 -->
      <xsl:element name="Telephone" namespace="{$target-ns}">123456789</xsl:element>
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>

修正说明:

  1. 通过exclude-result-prefixes="faia"排除原命名空间前缀,避免输出多余的命名空间声明。
  2. 替换<xsl:copy>为<xsl:element>创建Contact节点,强制使用目标命名空间,确保父节点命名空间正确。
  3. 新增的Telephone节点同样通过<xsl:element>指定目标命名空间,保证它属于新的默认命名空间,不会出现空命名空间或冲突。
  4. 用变量target-ns统一管理目标命名空间,提升代码可维护性。

转换后将得到你期望的输出:所有元素均属于urn:OECD:StandardAuditFile-Taxation/2.00命名空间,Contact节点下正确添加了Telephone节点,无多余命名空间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 02:26:04