Python 使用 expat 模块解析 XML 文件
本文介绍如何使用 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解析的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













