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

Python解析XML时如何保留未使用的命名空间?

解决ElementTree无法保留所有XML命名空间的问题

xml.etree.ElementTree在序列化XML时,只会保留实际被元素或属性引用的命名空间声明,未被使用的会自动丢弃。要完全保留原始所有xmlns前缀属性,需要手动提取并重新添加这些声明,同时注册所有命名空间避免前缀被替换。

修改后的Python代码

import xml.etree.ElementTree as xml

# 解析原始XML
messageFlowFile = xml.parse('sample.xml')
messageFlowRoot = messageFlowFile.getroot()

# 1. 收集根元素上所有原始的命名空间声明(xmlns:* 属性)
original_namespaces = {}
for attr_key, attr_value in messageFlowRoot.attrib.items():
    if attr_key.startswith('xmlns:'):
        original_namespaces[attr_key] = attr_value
        # 同时注册这些命名空间,避免输出时用默认前缀
        prefix = attr_key.split(':', 1)[1]
        xml.register_namespace(prefix, attr_value)

# 2. 重新添加所有原始命名空间声明到根元素
messageFlowRoot.attrib.update(original_namespaces)

# 3. 写入文件
messageFlowFile.write('NewMessage.xml', encoding='UTF-8', xml_declaration=True)

代码说明

  • 遍历根元素属性,筛选出所有xmlns:开头的命名空间声明并保存
  • 对每个命名空间调用register_namespace,防止ElementTree输出时用ns0这类默认前缀替代原始前缀
  • 将收集到的所有命名空间声明重新添加到根元素属性中,确保未被使用的命名空间也能保留
  • 写入文件后,输出XML会完全保留原始的所有命名空间信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:15:33