推荐使用 xml.etree.ElementTree(Python 3.9+ 直接调用 ET.indent(),旧版可手动实现轻量函数)或 lxml(支持 pretty_print=True),避免字符串拼接等易错方式。

用 Python 生成带缩进的美观 XML,核心是避免手动拼字符串,而应使用标准库中的 xml.etree.ElementTree(推荐)或第三方库如 lxml,配合格式化函数实现自动缩进。
用 ElementTree + 自定义 indent 函数(推荐,无需额外依赖)
Python 3.9+ 内置了 xml.etree.ElementTree.indent(),直接调用即可;旧版本需手动实现一个轻量 indent 函数:
- 创建元素树后,调用
ET.indent(root, space=" ", level=0)(3.9+) - 3.8 及更早:可复制官方推荐的 indent 函数源码,几行就能搞定
- 再用
ET.tostring(root, encoding="unicode", method="xml")转为带缩进的字符串
用 lxml(功能更强,支持 pretty_print)
lxml 对 XML 处理更专业,生成美观 XML 更简单直接:
- 安装:
pip install lxml - 创建
etree.Element后,用etree.tostring(tree, pretty_print=True, encoding="unicode") - 自动处理换行、缩进、属性顺序,还支持 DTD、XSLT、XPath 等高级功能
避免踩坑:别用字符串拼接或 minidom
手写 XML 字符串易出错(如未转义 &、)、难维护;xml.dom.minidom 虽有 toprettyxml(),但会插入多余空行、不控制缩进宽度、对中文支持弱,已不推荐用于新项目。
立即学习“Python免费学习笔记(深入)”;
完整小例子(ElementTree + indent)
Python 3.9+ 示例:
import xml.etree.ElementTree as ETroot = ET.Element("root") child = ET.SubElement(root, "item", attrib={"id": "1"}) child.text = "Hello 世界"
ET.indent(root, space=" ") # 关键一步 xml_str = ET.tostring(root, encoding="unicode") print(xml_str)
输出即为缩进良好、可读性强的 XML。









