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

如何将XML子节点的ns2命名空间移至EIWORoot根节点并移除子节点声明?

解决方案:将命名空间统一迁移至XML根节点

要实现把xmlns:ns2="urn:us:gov:hhs:acf:cseiwo"从子节点移到根节点EIWORoot并移除子节点内的该声明,你可以使用以下XSLT方案:

输入XML示例

<EIWORoot>
  <CaseData>
    <ns2:Household xmlns:ns2="urn:us:gov:hhs:acf:cseiwo">
      <ns2:MemberCount>3</ns2:MemberCount>
    </ns2:Household>
  </CaseData>
  <ns2:Verification xmlns:ns2="urn:us:gov:hhs:acf:cseiwo">Completed</ns2:Verification>
</EIWORoot>

目标XSLT代码

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:ns2="urn:us:gov:hhs:acf:cseiwo">
  <!-- 基础身份转换:默认复制所有节点和属性 -->
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <!-- 处理根节点,添加统一的ns2命名空间声明 -->
  <xsl:template match="EIWORoot">
    <EIWORoot xmlns:ns2="urn:us:gov:hhs:acf:cseiwo">
      <xsl:apply-templates select="@*|node()"/>
    </EIWORoot>
  </xsl:template>

  <!-- 移除所有子节点上的ns2命名空间声明属性 -->
  <xsl:template match="@xmlns:ns2"/>
</xsl:stylesheet>

预期输出XML

<EIWORoot xmlns:ns2="urn:us:gov:hhs:acf:cseiwo">
  <CaseData>
    <ns2:Household>
      <ns2:MemberCount>3</ns2:MemberCount>
    </ns2:Household>
  </CaseData>
  <ns2:Verification>Completed</ns2:Verification>
</EIWORoot>

关键逻辑说明

  1. 身份转换模板:作为基础模板,负责复制所有未被特殊模板匹配的节点和属性,保证原有XML结构和内容不变。
  2. 根节点处理模板:显式生成带有ns2命名空间声明的EIWORoot根节点,确保命名空间在根节点统一声明。
  3. 移除子节点命名空间声明:通过匹配所有@xmlns:ns2属性且不输出任何内容,直接删除子节点上的该命名空间声明。

注意:XSLT本身需要预先声明ns2命名空间,这样在处理带有ns2前缀的元素时,能正确保留其命名空间URI(前缀只是别名,真正起作用的是URI),避免元素丢失命名空间信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:42:50