Python中创建带属性的XML节点最常用方式是xml.etree.ElementTree模块,推荐初始化时传入属性字典或用set()方法设置,属性值必须为字符串,支持中文和缩进需借助minidom格式化。

Python中创建带属性的XML节点,最常用且推荐的方式是使用内置的 xml.etree.ElementTree 模块。它简洁、标准、无需额外安装,适合大多数场景。
用Element创建节点并设置属性
直接在创建 Element 时传入属性字典,或后续用 set() 方法添加/修改属性:
from xml.etree import ElementTree as ET方式1:初始化时传入属性(推荐)
node = ET.Element("person", {"id": "101", "type": "student"})
方式2:创建后用 set() 添加或更新
node = ET.Element("person") node.set("id", "101") node.set("type", "student")
给子节点添加属性并构建完整结构
属性只属于节点本身,与文本内容无关。可链式构建带属性的嵌套结构:
立即学习“Python免费学习笔记(深入)”;
root = ET.Element("school")
添加带属性的 student 节点
student = ET.SubElement(root, "student", id="2024001", grade="A")
student.text = "张三" # 设置文本内容(不是属性)
添加带属性的 course 子节点
course = ET.SubElement(student, "course", code="CS101", credits="3")
course.text = "Python编程"
生成字符串(美化缩进需自行处理或用第三方库)
print(ET.tostring(root, encoding="unicode"))
注意属性值必须是字符串
ElementTree 要求所有属性值为字符串类型。传入数字、布尔值等会报错:
- ✅ 正确:
node.set("age", "22")、node.set("active", "true") - ❌ 错误:
node.set("age", 22)(会抛TypeError) - ? 建议统一用
str()转换,如node.set("count", str(5))
保存到文件并支持中文和缩进(可选增强)
默认 tostring() 不缩进,也不自动声明编码。如需可读性更好的输出,可简单补缩进,或用 xml.dom.minidom 格式化:
# 简单缩进(适用于小结构)
rough_string = ET.tostring(root, encoding="unicode")
dom = xml.dom.minidom.parseString(rough_string)
pretty_xml = dom.toprettyxml(indent=" ", encoding="utf-8").decode("utf-8")
with open("output.xml", "w", encoding="utf-8") as f:
f.write(pretty_xml)










