python使用expat解析xml

python有一些内建的xml解析库,本文介绍python中的expat库

expat的特点之一就是支持动态解析xml。何为动态?就是某个xml串并不需要全部输入给expat,哪怕只是一部分,expat也能感应到响应的事件。事件?比如检测到新元素出现(实质上是expat遇到了‘<’),或者检测到某个元素处理完毕(遇到了‘/>’)。所以——expat不一定需要完整的xml就能工作。

看程序

复制代码
 1 import xml.parsers.expat
 2 
 3 class ExParser(object):
 4     '''Parse roster xml'''
 5     def __init__(self, xml_raw):
 6         '''init parser and setup handlers'''
 7         self.parser = xml.parsers.expat.ParserCreate()
 8 
 9         #connect handlers
10         self.parser.StartElementHandler = self.start_element
11         self.parser.EndElementHandler = self.end_element
12         self.parser.CharacterDataHandler = self.char_data
13         self.parser.Parse(xml_raw)
14         del(xml_raw)
15 
16     def start_element(self, name, attrs):
17         '''Start xml element handler'''
18         print 'start:'+name
19 
20     def end_element(self, name):
21         '''End xml element handler'''
22         print 'end:'+name
23 
24     def char_data(self, data):
25         '''Char xml element handler'''
26         print 'data is '+data
复制代码

啊分析:

7行 ExParser的构造中定义了一个expat解析器

10-12行 为解析器设置感兴趣的回调函数

13行 开始解析我们的xml

然后就是等待expat解析,一旦expat解析器遇到xml的 元素开始,元素结束,元素值 事件时,会回分别调用start_element, end_element, char_data函数

16行 参数name,attrs 分别代表节点名称,节点属性(字典)

20行 参数name代表节点名称

24行 参数data代表节点数据

拿到这些值后,能做什么都可以了。

尤其当我们遇到大块xml数据的时候,可以利用expat动态解析这一点来分块解析一个大块。

posted on   jogger  阅读(3044)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
< 2012年11月 >
28 29 30 31 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 1
2 3 4 5 6 7 8

导航

统计

点击右上角即可分享
微信分享提示