ElementTree是Python标准库中轻量级XML解析模块,将XML映射为树状Element对象,支持加载(fromstring解析字符串、parse加载文件需getroot)、查找(find/findall/get)、遍历(iter)和序列化,但XPath功能有限、无命名空间高级支持。

ElementTree 是 Python 标准库中用于解析和生成 XML 的轻量级模块,它把 XML 文档映射为树状结构,每个节点是一个 Element 对象,支持遍历、查找、修改和序列化。
怎么加载 XML 字符串或文件
用 ET.fromstring() 解析字符串,用 ET.parse() 加载文件。注意:后者返回的是 ElementTree 对象,需调用 .getroot() 才能得到根 Element;前者直接返回根元素。
-
ET.fromstring("→ 直接得 ")text Element -
ET.parse("data.xml").getroot()→ 先读文件,再取根节点 - 如果 XML 带 XML 声明(如
),fromstring()也能正常处理,无需手动剥离
如何查找子元素和属性值
用 .find()、.findall() 和 .get() 是最常用组合。XPath 支持有限(仅基础路径,不支持 // 或轴运算),别指望它能替代 lxml 的完整 XPath。
-
elem.find("child")返回第一个匹配的直接子元素,找不到返回None -
elem.findall("child")返回所有同名直接子元素的列表 -
elem.get("id")获取属性值,不存在时默认返回None,可传第二个参数设默认值,如elem.get("id", "unknown") - 文本内容通过
elem.text访问,尾部空白不会被自动 strip —— 这是常见坑,需要手动.strip()
为什么用 iter() 而不是嵌套 for 循环遍历所有节点
当 XML 层级深、结构不固定,或你需要提取所有特定标签(不管在哪一层)时,.iter(tag) 比手动递归或多重 findall() 更简洁可靠。
本文档主要讲述的是用Apache Spark进行大数据处理——第一部分:入门介绍;Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架。最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一。 在这个Apache Spark文章系列的第一部分中,我们将了解到什么是Spark,它与典型的MapReduce解决方案的比较以及它如何为大数据处理提供了一套完整的工具。希望本文档会给有需要的朋友带来帮助;感
立即学习“Python免费学习笔记(深入)”;
-
root.iter("item")返回所有名为item的后代元素(包括子孙),按文档顺序迭代 - 不支持通配符如
*,但可以传None来迭代所有元素:root.iter() - 性能上比逐层
findall()稍好,因为底层是 C 实现的一次深度优先遍历 - 注意:它不返回文本节点或注释节点,只返回
Element实例
import xml.etree.ElementTree as ET xml_str = '''''' root = ET.fromstring(xml_str) for book in root.findall("book"): bid = book.get("id") title = book.find("title").text.strip() if book.find("title") is not None else "" print(f"ID: {bid}, Title: {title}") Python Crash Course Eric Matthes Fluent Python Luciano Ramalho
ElementTree 简单够用,但遇到命名空间、复杂 XPath、DTD 验证或大文件流式解析时,就得换 lxml 或 xml.sax。它的默认行为(比如对空白文本的保留、无命名空间前缀自动展开)容易在跨系统数据交换时引发隐性问题。









