ElementTree 是 Python 标准库中轻量高效的 XML 解析与生成工具,支持快速加载、XPath 查找、动态修改及编码/命名空间处理。

Python 的 xml.etree.ElementTree(常简写为 ElementTree)是标准库中轻量、高效解析和生成 XML 的首选工具。它不依赖外部库,上手快,适合大多数日常 XML 处理任务。
快速加载和遍历 XML
用 ET.parse() 读取文件,或用 ET.fromstring() 解析字符串。根元素即返回的 Element 对象,可直接用属性和方法遍历子节点:
-
elem.tag:获取标签名(如"book") -
elem.text:获取开始标签和结束标签之间的文本内容 -
elem.attrib:获取属性字典(如{"id": "101"}) -
for child in elem:可直接迭代子元素
用 XPath 简洁查找元素
ElementTree 支持有限但够用的 XPath 语法,比手动嵌套循环更清晰:
-
root.find("author"):找第一个直接子元素 -
root.findall(".//title"):找所有层级下的(//表示任意深度) -
root.findall('book[@category="fiction"]'):按属性筛选 -
root.find('book/title').text:链式查找并取文本,注意加异常处理以防 None
修改和构建 XML
ElementTree 不仅能读,还能动态改写:
立即学习“Python免费学习笔记(深入)”;
- 修改文本:
elem.text = "新标题" - 添加属性:
elem.set("updated", "true") - 新增子元素:
new_elem = ET.SubElement(parent, "price");再设new_elem.text = "29.99" - 删除子元素:
parent.remove(child) - 保存回文件:
tree.write("output.xml", encoding="utf-8", xml_declaration=True)
注意编码与命名空间
中文 XML 文件常因编码出错报 UnicodeDecodeError。推荐显式指定编码:
- 读文件时:
ET.parse("data.xml", parser=ET.XMLParser(encoding="utf-8")) - 写文件时务必加
encoding="utf-8"和xml_declaration=True,避免乱码或缺失声明 - 含命名空间(如
xmlns:ns="http://example.com")时,XPath 需传入命名空间映射字典:ns = {"ns": "http://example.com"}; root.find("ns:book", ns)
不复杂但容易忽略细节,掌握这四点就能覆盖绝大多数 XML 场景。










