Python 使用 expat 模块解析 XML 文件

青禾
青禾
发布时间:2026-10-11| 3人浏览过
原创

本文介绍如何使用 Python 内置的 xml.parsers.expat 模块解析 XML 文件。通过定义 start_element、end_element 和 char_data 回调函数,分别处理节点开始、结束及文本数据。示例代码展示了如何绑定处理器、配置解析器并读取文件,适用于需要轻量级 XML 解析的场景。

Python 解析XML文件

在 Python 中,可以使用 xml.parsers.expat 模块来解析 XML 文件。该模块提供了一个基于事件的解析器,允许用户通过定义回调函数来处理 XML 数据。

定义回调函数

首先,我们需要定义三个回调函数,分别处理 XML 节点的开始、结束和文本数据:

  • start_element:当解析器遇到一个节点的开始标签时调用。该函数可以获取节点名称及其属性。
  • end_element:当解析器遇到一个节点的结束标签时调用。该函数用于处理节点结束时的逻辑。
  • char_data:当解析器遇到节点之间的文本数据时调用。该函数用于获取节点中间的文本值。

在 char_data 函数中,我们可以选择忽略换行符和空白字符数据,以简化处理逻辑。

创建解析器实例

接下来,我们创建一个 ParserCreate 实例 p,并绑定上述回调函数:

  • 将 start_element 绑定为 StartElementHandler。
  • 将 end_element 绑定为 EndElementHandler。
  • 将 char_data 绑定为 CharacterDataHandler。

此外,我们可以设置 p.returns_unicode 为 False,以指定解析器返回字节字符串而非 Unicode 字符串。

解析 XML 文件

最后,我们打开一个名为 sample.xml 的文件,并调用 p.ParseFile(f) 来解析文件内容。解析完成后,关闭文件句柄 f。

import xml.parsers.expat

# 定义全局变量 level 控制打印缩进
level = 0

def start_element(name, attrs):
    global level
    print(' ' * level + f'Start element: {name}')
    level += 1

def end_element(name):
    global level
    level -= 1
    print(' ' * level + f'End element: {name}')

def char_data(data):
    if data.strip():  # 忽略换行符和空白字符数据
        print(' ' * level + f'Character data: {data}')

# 创建 ParserCreate 实例 p
p = xml.parsers.expat.ParserCreate()

# 绑定 StartElementHandler 为 start_element
p.StartElementHandler = start_element

# 绑定 EndElementHandler 为 end_element
p.EndElementHandler = end_element

# 绑定 CharacterDataHandler 为 char_data
p.CharacterDataHandler = char_data

# 设置 p.returns_unicode 为 False
p.returns_unicode = False

# 打开 sample.xml 文件
with open('sample.xml', 'rb') as f:
    # 调用 p.ParseFile(f) 解析文件
    p.ParseFile(f)

通过上述步骤,我们可以使用 Python 的 xml.parsers.expat 模块解析 XML 文件,并根据需要处理节点和文本数据。

以上就是Python 解析XML文件的详细内容,更多关于Python XML解析的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。