Python 库手册:xml.etree.ElementTree 处理 XML 数据模块

xml.etree.ElementTree(简称 ElementTree)是 Python 标准库中用于解析、创建和操作 XML 数据的模块。它提供了一种轻量、易用的方式来读取、修改和写入 XML 文件,适用于配置文件处理、数据交换、网络通信等应用场景。

常见应用场景:

(1)读取 XML 配置文件并提取参数。

(2)修改 XML 数据结构(如节点属性、内容)。

(3)创建新的 XML 文档并保存。

(4)从 Web API 获取的 XML 响应中提取数据。

(5)将对象数据结构序列化为 XML 格式进行存储。

◆ ◆ ◆

核心概念

1、Element 对象是 XML 的基本单位

每个节点都是一个 Element,包含标签名、属性、文本、子节点等信息。

2、ElementTree 是完整 XML 树的封装

ElementTree 对象可以从文件或字符串构建,也可用于将完整 XML 写出。

3、XPath 支持部分路径语法

可使用 .find()、.findall() 等方法进行节点查找,支持简化版 XPath 表达式。

4、支持双向操作:读取解析和创建写入

不仅能读取 XML,还能用 Element() 构造新的结构,并用 .write() 保存。

5、不支持复杂的 XML Schema 或命名空间解析

适用于中小型、结构清晰的 XML 数据处理任务。

◆ ◆ ◆

应用举例

例 1:读取 XML 文件并遍历节点

python 复制代码
import xml.etree.ElementTree as ET
tree = ET.parse("catalog.xml")  # 加载 XML 文件root = tree.getroot()  # 获取根节点
for child in root:    print(child.tag, child.attrib)  # 输出标签名和属性字典

例 2:查找特定节点并读取内容

python 复制代码
import xml.etree.ElementTree as ET
tree = ET.parse("catalog.xml")  # 加载 XML 文件root = tree.getroot()  # 获取根节点
# 找到第一个名为 title 的子节点item = root.find("./book/title")
if item is not None:
    print("内容:", item.text)

例 3:创建 XML 并写入文件

makefile 复制代码
import xml.etree.ElementTree as ET
root = ET.Element("catalog")book = ET.SubElement(root, "book", id="1")title = ET.SubElement(book, "title")title.text = "Python 入门"
tree = ET.ElementTree(root)tree.write("catalog.xml", encoding="utf-8", xml_declaration=True)

例 4:从字符串解析 XML

python 复制代码
import xml.etree.ElementTree as ET

xml_str = """<user><name>张三</name><age>30</age></user>"""root = ET.fromstring(xml_str)print("姓名:", root.find("name").text)

例 5:修改节点内容并保存

python 复制代码
import xml.etree.ElementTree as ET
# 解析 XML 文件tree = ET.parse("catalog.xml")root = tree.getroot()
# 查找 <title> 节点(假设只有一个 <book> 节点)title = root.find("./book/title")if title is not None:    title.text = "Python 从入门精通"  # 修改文本内容
    # 保存修改后的 XML 文件    tree.write("catalog.xml", encoding="utf-8", xml_declaration=True)else:    print("未找到 <title> 节点")

◆ ◆ ◆

常用函数速览

ET.parse(filename)

从文件中解析 XML 数据,并返回 ElementTree 对象。

参数:

filename:XML 文件路径(字符串或类文件对象)

返回:ElementTree 对象

ET.fromstring(xml_string)

从字符串中解析 XML 数据,返回根元素。

参数:xml_string(str)------ XML 格式字符串

返回:根元素 Element 对象

ET.Element(tag, attrib={})

创建一个新的 XML 元素节点。

参数:

tag:标签名

attrib:可选的属性字典

返回:Element 对象

ET.SubElement(parent, tag, attrib={})

在指定父元素下添加子元素。

参数:

parent:父元素

tag:子元素标签名

attrib:属性字典

返回:子元素对象

Element.find(path)

查找第一个匹配 path 的子元素。

参数:path(str)------ XPath 表达式(简化)

返回:子元素 Element 或 None

Element.findall(path)

查找所有匹配 path 的子元素。

参数:path(str)------ XPath 表达式(简化)

返回:包含多个 Element 的列表

Element.get(attr_name)

获取当前元素中指定属性的值。

参数:attr_name(str)------ 属性名

返回:属性值字符串,或 None

Element.set(attr_name, value)

设置当前元素的属性值。

参数:

attr_name:属性名

value:属性值(str)

返回:无

Element.text

获取或设置元素的文本内容。

类型:字符串属性

ElementTree.write(filename, encoding, xml_declaration=True)

将完整 XML 树写入文件。

参数:

filename:目标文件名

encoding:如 "utf-8"

xml_declaration:是否写入 <?xml ... ?> 声明

返回:无

◆ ◆ ◆

补充说明

1、XML 节点支持嵌套结构,Element 可看作树结构的节点。

2、标签名区分大小写,属性顺序无关紧要。

3、模块不支持 DTD 校验、XPath 的全功能或复杂命名空间处理,如有需要可使用第三方库 lxml。

"点赞有美意,赞赏是鼓励"

相关推荐
瀚高PG实验室30 分钟前
发布端逻辑复制槽消失
数据库·postgresql·瀚高数据库
云和数据.ChenGuang38 分钟前
深入解析 Python 的 dir():从用法到 CPython 源码实现
开发语言·人工智能·python·langchain
ss27340 分钟前
PostgreSQL慢查询定位与优化
数据库·postgresql
馒头不想说话1 小时前
实体店老板的24小时AI运营员工,写、剪、发全自动,省下一整个团队工资
前端
三无少女指南1 小时前
从这里开始:Java 后端与 AI 工程的三条阅读路线
java·学习路线·ai工程
香蕉大香蕉(06敬畏市场)1 小时前
MySQL 单点详解(07)
java·数据库·mysql·ai·博客·八股
nice_lcj5201 小时前
深入理解 Java 反射:从 Class 对象到方法调用(含性能实测 + 迷你 IOC 实战 + 面试考点)
java·开发语言·后端·面试
骑着蜗牛撵大象3272 小时前
2026 后端 AI 工程化:Spring AI 管调用、MCP 管工具、Agent 内嵌管自治
java·人工智能·后端·spring·ai·可观测性·mcp
tryxr2 小时前
JVM 垃圾回收机制
java·jvm·gc·垃圾回收
smilejingwei2 小时前
TRAE 插件上新 | SQLazy:让 AI 写出可信复杂 SQL
数据库·人工智能·sql