电话
400 9058 355
ElementTree是Python标准库中轻量级XML解析模块,将XML映射为树状Element对象,支持加载(fromstring解析字符串、parse加载文件需getroot)、查找(find/findall/get)、遍历(iter)和序列化,但XPath功能有限、无命名空间高级支持。
ElementTree 是 Python 标准库中用于解析和生成 XML 的轻量级模块,它把 XML 文档映射为树状结构,每个节点是一个 Element 对象,支持遍历、查找、修改和序列化。
用 ET.fromstring() 解析字符串,用 ET.parse() 加载文件。注意:后者返回的是 ElementTree 对象,需调用 .getroot() 才能得到根 Element;前者直接返回根元素。
ET.fromstring("text ") → 直接得 Element
ET.parse("data.xml").getroot() → 先读文件,再取根节点),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() 更简洁可靠。
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 MatthesFluent Python Luciano Ramalho
ElementTree 简单够用,但遇到命名空间、复杂 XPath、DTD 验证或大文件流式解析时,就得换 lxml 或 xml.sax。它的默认行为(比如对空白文本的保留、无命名空间前缀自动展开)容易在跨系统数据交换时引发隐性问题。
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...