Python如何创建带属性的XML节点

14次阅读

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

Python如何创建带属性的XML节点

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)

text=ZqhQzanResources