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

如何用ElementTree复制含命名空间及属性的指定XML根元素?

搞定XML命名空间与根元素生成问题

嘿,我来帮你解决这个XML生成的问题!你现在的代码之所以输出不符合预期,主要是三个小问题:命名空间前缀没注册正确、根元素名称写错了,还没添加上需求里的属性。下面是修正后的完整实现:

正确代码示例

import xml.etree.ElementTree as ET

# 关键:注册命名空间时指定前缀为ns0,对应目标URI
ET.register_namespace("ns0", "http://website.com/schemas/StdFX1.3.In")

# 创建正确的根元素:命名空间URI + 元素名StdFX1.3
root = ET.Element('{http://website.com/schemas/StdFX1.3.In}StdFX1.3')

# 给根元素添加需要的三个属性
root.set('CutOff', '2200LON')
root.set('DataSource', '')
root.set('SpotDataSource', '')

# 生成并输出XML(两种方式可选)
# 方式1:写入文件
tree = ET.ElementTree(root)
ET.indent(tree)  # 可选:让XML格式化带缩进,Python 3.9+支持
tree.write('output.xml', encoding='UTF-8', xml_declaration=True)

# 方式2:直接打印XML字符串
import io
output_buffer = io.BytesIO()
tree.write(output_buffer, encoding='UTF-8', xml_declaration=True)
print(output_buffer.getvalue().decode('UTF-8'))

代码细节解释

  • 命名空间注册:之前你用空字符串作为前缀注册,所以输出时不会显示ns0。现在明确指定ns0作为前缀,这样ElementTree生成XML时就会用这个前缀绑定对应URI。
  • 根元素创建:元素名必须写成{命名空间URI}StdFX1.3这种格式,让ElementTree识别它属于我们注册的ns0命名空间,而不是你之前写的Stuff。
  • 属性添加:用set()方法逐个添加需求里的CutOff、DataSource、SpotDataSource属性,值完全匹配你的要求。
  • XML输出:指定xml_declaration=True会生成完整的XML声明,encoding='UTF-8'确保编码正确,ET.indent()是Python 3.9+新增的方法,能让输出的XML更美观易读。

最终生成的XML

<?xml version='1.0' encoding='UTF-8'?>
<ns0:StdFX1.3 xmlns:ns0="http://website.com/schemas/StdFX1.3.In" CutOff="2200LON" DataSource="" SpotDataSource=""/>

完美匹配你需要的XML结构啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:11:22