通八洲科技

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

日期:2026-01-02 00:00 / 作者:畫卷琴夢
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")

给子节点添加属性并构建完整结构

属性只属于节点本身,与文本内容无关。可链式构建带属性的嵌套结构:

root = ET.Element("school")

添加带属性的 student 节点

student = ET.SubElement(root, "student", id="2025001", grade="A") student.text = "张三" # 设置文本内容(不是属性)

添加带属性的 course 子节点

course = ET.SubElement(student, "course", code="CS101", credits="3") course.text = "Python编程"

生成字符串(美化缩进需自行处理或用第三方库)

print(ET.tostring(root, encoding="unicode"))

注意属性值必须是字符串

ElementTree 要求所有属性值为字符串类型。传入数字、布尔值等会报错:

保存到文件并支持中文和缩进(可选增强)

默认 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)