Python XML解析之SAX
来源:互联网 发布:java replaceall \\s 编辑:程序博客网 时间:2024/05/02 04:22
Python XML解析之SAX
SAX,全称Simple API for XML,既是一种接口,也是一种软件包。它是一种XML解析的替代方法。SAX不同于DOM解析,它逐行扫描文档,一边扫描一边解析。由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中,这对于大型文档的解析是个巨大优势。
用sax解析xml需要继承ContentHandler,引入xml.sax中的parse函数
ContentHandler常用的方法:
1.startDocument()方法,文档启动的时候调用。
2.endDocument()方法,解析器到达文档结尾时调用。
3.startElement(name, attrs)方法,遇到XML开始标签时调用,name是标签的名字,attrs是标签的属性值。
4.endElement(name)方法,遇到XML结束标签时调用,name是标签的名字。
5.characters(content)方法,读取标签文本内容,content是文本内容
解析people.xml文档:
<?xml version="1.0" encoding="utf-8" ?><people> <person id="1"> <name>张三</name> <age>18</age> <tel>1552644646446</tel> </person> <person id="2"> <name>李四</name> <age>16</age> <tel>12599897</tel> </person> <person id="3"> <name>王五</name> <age>17</age> <tel>21245478956</tel> </person></people>
还需要一个person.py,把数据封装到person中
class person: name=None age=None tel=None def __init__(self,name=None,age=None,tel=None): self.name=name self.age=age self.tel=tel def __repr__(self): return "{0:20}{1:<5}{2:15}".format(self.name,self.age,self.tel)
以下是用sax解析xml的代码:
#导入sax模块和personimport xml.saxfrom person import personclass MyHandler(xml.sax.ContentHandler):#继承ContentHandler #初始化 def __init__(self): self.person=None self.tag=None #文件开始读 def startElement(self,name,attrs):#name是标签名字,attrs是标签的属性值 self.tag=name if name == 'person': self.person=person()#如果标签名字是person,调用person()赋给self.person #文件结束读 def endElement(self,name):#name是标签名字 if name == 'person': global people#调用外部全局标量 people.append(self.person)#如果标签名字是person,把解析完的数据加入到people的元组中 self.person=None self.tag=None #读取标签中的文本内容 def characters(self,content):#content代表文本内容 if 'name'==self.tag: self.person.name = content#如果标签名字等于name,就把name中的文本内容赋给self.person.name if 'age'==self.tag: self.person.age = int(content)#如果标签名字等于age,就把age中的文本内容赋给self.person.age,并强制转换成int类型 if 'tel'==self.tag: self.person.tel = content#如果标签名字等于tel,就把tel中的文本内容赋给self.person.telpeople=[]#创建一个空的元组parse=xml.sax.make_parser()#创建一个新的解析器对象并返回print(parse)#关闭命名空间#parse.setFeature(xml.sax.handler.feature_namespaces,0)parse.setContentHandler(MyHandler())#重写MyHandler()方法parse.parse("people.xml")#加载xml文档for i in people:#通过for循环people元组,遍历xml中的文本内容 print(i)
阅读全文
0 0
- Python XML解析之SAX
- 解析xml之--SAX
- 解析xml之--SAX
- 解析xml之--SAX
- XML解析之SAX
- XML 解析之SAX
- XML解析之SAX
- 【xml之SAX解析】
- XML解析之SAX
- 解析XML之SAX
- xml之SAX解析
- xml之sax解析
- xml解析之sax
- XML解析之SAX
- xml解析之SAX
- XML之sax解析
- XML解析之SAX
- xml之SAX解析
- redhat6.4桌面版
- Mac下配置maven
- DevExpress报表设计器自定义工具箱
- Array对象目录 总览概括
- 基础JavaScript(一)
- Python XML解析之SAX
- c3p0 JNDI
- log4j学习
- Object对象目录 总览概括
- 一个晚上写出来的C语言版生命游戏
- Property属性对象目录 总览概括
- POJ2186 Popular Cows Kosaraju
- Date对象目录 总览概括
- JSON对象目录 总览概括