在Python开发中,XML作为常见的结构化数据格式,经常出现在配置文件、数据接口交互等场景中。使用合适的工具处理XML可以大幅降低开发难度,提升代码的稳定性。

Python处理XML的常规流程
处理XML的核心步骤通常包括读取XML文件、解析XML结构、提取或修改目标数据、保存修改后的XML内容。不同的解析库在实现这些步骤时的复杂度差异较大。
使用ElementTree解析XML的基础示例
ElementTree是Python标准库xml模块下的子模块,无需额外安装即可使用,下面是解析本地XML文件的基础代码:
import xml.etree.ElementTree as ET
# 解析本地XML文件
tree = ET.parse('test.xml')
# 获取根节点
root = tree.getroot()
# 遍历根节点下的所有子节点
for child in root:
print(f'节点标签: {child.tag}, 节点属性: {child.attrib}')
# 获取子节点的文本内容
if child.text:
print(f'节点内容: {child.text.strip()}')
提取指定节点的数据
如果需要提取特定标签的节点,可以使用find()和findall()方法,前者返回第一个匹配的节点,后者返回所有匹配的节点列表:
import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
root = tree.getroot()
# 查找所有book节点
book_nodes = root.findall('book')
for book in book_nodes:
# 获取book节点的id属性
book_id = book.get('id')
# 查找book节点下的title子节点
title_node = book.find('title')
if title_node is not None and title_node.text:
print(f'书籍ID: {book_id}, 书名: {title_node.text}')
修改和保存XML内容
ElementTree也支持修改节点的属性、文本内容,以及新增或删除节点,修改完成后可以将结果写入新的XML文件:
import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
root = tree.getroot()
# 修改第一个book节点的title内容
first_book = root.find('book')
if first_book is not None:
title_node = first_book.find('title')
if title_node is not None:
title_node.text = '修改后的书名'
# 新增一个book节点
new_book = ET.SubElement(root, 'book', attrib={'id': '3'})
new_title = ET.SubElement(new_book, 'title')
new_title.text = '新增的书籍'
# 保存修改后的XML到新文件
tree.write('new_test.xml', encoding='utf-8', xml_declaration=True)
ElementTree库的优势分析
无需额外安装,兼容性强
ElementTree是Python标准库的组成部分,只要安装了Python环境就可以直接使用,不需要像第三方库那样处理依赖安装、版本兼容等问题,在不同操作系统和Python版本下的表现都很稳定,适合作为通用项目的基础XML处理工具。
内存占用低,适合处理大文件
相比DOM解析方式需要把整个XML文件加载到内存中构建树结构,ElementTree采用的是轻量级的解析方式,对于中等大小的XML文件,内存占用明显更低。如果是处理特别大的XML文件,还可以使用ElementTree的迭代解析模式,逐段读取和处理XML内容,避免一次性占用过多内存。
API简洁易用,学习成本低
ElementTree的API设计非常贴合Python的使用习惯,节点的操作方式类似列表和字典,比如通过node.tag获取标签名,node.attrib获取属性字典,node.text获取文本内容,不需要记忆复杂的接口规则,新手也能快速上手完成XML的解析、修改等操作。
支持XPath查询,提取数据更灵活
ElementTree支持简单的XPath语法,可以通过路径表达式快速定位目标节点,不需要多层嵌套遍历。比如查找所有层级下的title节点,可以直接使用root.findall('.//title'),大幅简化了复杂XML结构的查询逻辑。
支持XML的生成和序列化
除了解析已有的XML文件,ElementTree还支持从零构建XML结构,通过ET.Element()创建根节点,ET.SubElement()添加子节点,最后通过ET.tostring()或者tree.write()输出XML内容,不需要手动拼接XML字符串,避免了转义错误等问题。
适用场景说明
如果你的项目是常规的中小型XML处理需求,比如解析配置文件、处理接口返回的XML数据,ElementTree完全可以满足需求,而且不需要引入额外依赖。如果是需要处理超大型XML文件,或者需要支持非常复杂的XPath语法、XML Schema校验等功能,可以考虑结合lxml库使用,它兼容ElementTree的API,同时提供了更丰富的功能。
PythonXMLElementTreeXML解析修改时间:2026-06-25 08:30:31