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

使用Python的tree.write()保存XML结构时如何格式化树形输出?

问题:Python修改XML后元素无树形结构显示

我想要使用Python向XML文件中添加Element及Subelements,但修改后的文件中元素和子元素显示为一行,而非树形结构。我的代码如下:

import xml.etree.ElementTree as ET

tree = ET.parse('existing_file.xml')
root = tree.getroot()
new_object = ET.SubElement(root, 'object')
name = ET.SubElement(new_object, 'name')
name.text = 'car'
color = ET.SubElement(new_object, 'color')
color.text = 'Red'
new_tree = ET.ElementTree(root)
new_tree.write('new_file.xml')

执行后得到的文件内容无结构,如下:

<object><name>car</name><color>red</color></object>

但我需要的是树形结构:

<object>
     <name>car</name>
     <color>red</color>
</object>

请问我哪里操作出错了?


解决方案

你没写错逻辑,只是ElementTree.write()方法默认输出紧凑格式的XML,不会自动添加缩进和换行。要输出树形结构,分两种情况处理:

情况1:Python 3.9及以上版本

Python 3.9开始,xml.etree.ElementTree新增了indent()方法,可以直接给XML元素添加缩进:

import xml.etree.ElementTree as ET

tree = ET.parse('existing_file.xml')
root = tree.getroot()
new_object = ET.SubElement(root, 'object')
name = ET.SubElement(new_object, 'name')
name.text = 'car'
color = ET.SubElement(new_object, 'color')
color.text = 'Red'

# 给XML元素添加缩进
ET.indent(root, space="    ", level=0)
# 写入文件,指定编码和XML声明(可选)
tree.write('new_file.xml', encoding='utf-8', xml_declaration=True)
  • space:定义缩进的空格数,可替换为"\t"使用制表符缩进
  • encoding='utf-8'和xml_declaration=True:可选参数,用于指定文件编码并生成XML声明头

情况2:兼容Python 3.8及以下版本

旧版本ElementTree没有内置缩进方法,可借助xml.dom.minidom实现美化输出:

import xml.etree.ElementTree as ET
import xml.dom.minidom

tree = ET.parse('existing_file.xml')
root = tree.getroot()
new_object = ET.SubElement(root, 'object')
name = ET.SubElement(new_object, 'name')
name.text = 'car'
color = ET.SubElement(new_object, 'color')
color.text = 'Red'

# 将ElementTree对象转换为minidom格式并美化
rough_string = ET.tostring(root, 'utf-8')
reparsed = xml.dom.minidom.parseString(rough_string)
pretty_xml = reparsed.toprettyxml(indent="    ")

# 写入文件
with open('new_file.xml', 'w', encoding='utf-8') as f:
    f.write(pretty_xml)

这样输出的XML就会呈现你需要的树形结构。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 17:52:41