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

Python中创建带属性的XML节点,最常用且推荐的方式是使用内置的 xml.etree.ElementTree 模块。它简洁、标准、无需额外安装,适合大多数场景。
用Element创建节点并设置属性
直接在创建 Element 时传入属性字典,或后续用 set() 方法添加/修改属性:
from xml.etree import ElementTree as ET
<h1>方式1:初始化时传入属性(推荐)</h1><p>node = ET.Element("person", {"id": "101", "type": "student"})</p><h1>方式2:创建后用 set() 添加或更新</h1><p>node = ET.Element("person")
node.set("id", "101")
node.set("type", "student")</p>给子节点添加属性并构建完整结构
属性只属于节点本身,与文本内容无关。可链式构建带属性的嵌套结构:
立即学习“Python免费学习笔记(深入)”;
root = ET.Element("school")
<h1>添加带属性的 student 节点</h1><p>student = ET.SubElement(root, "student", id="2024001", grade="A")
student.text = "张三" # 设置文本内容(不是属性)</p><h1>添加带属性的 course 子节点</h1><p>course = ET.SubElement(student, "course", code="CS101", credits="3")
course.text = "Python编程"</p><h1>生成字符串(美化缩进需自行处理或用第三方库)</h1><p>print(ET.tostring(root, encoding="unicode"))</p>注意属性值必须是字符串
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")
<p>with open("output.xml", "w", encoding="utf-8") as f:
f.write(pretty_xml)</p>










