python中xml解析sax_【Python】XML文件解析之SAX(Simple API for XML)

常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,当然使用场合也不同。

DOM和SAX的区别

DOM(Document Object Model):将XML数据在内存中解析成一个树,通过对树的操作来操作XML。

SAX(Simple API for XML):采用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。

因DOM需要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,而SAX流式读取XML文件,比较快,占用内存少,但需要用户实现回调函数(handler)。

SAX和DOM的使用场合

Use DOM when:

• read-write access to the document is required

• the processing requires random access to the document

Use SAX when:

• dealing with big documents (>1MB)

• looking for a precise information in the document

• instantiating custom objects from the document

SAX程序的构成

readers:XML文件的读取器,读取过程产生一系列的事件发送给handler进程处理;

handlers:事件处理器,由用户自定义事件处理函数;

xmlfiles:要处理的XML文件

exceptions:SAX提供了四种异常处理类

简单示例

首先创建一个xml文件:students.xml:

zhangsan

20

1990.11.22

lisi

21

1992.06.15

创建python程序:sax_demo.py

# -*- coding:utf-8 -*-

import sys

from xml.sax import parse, handler, SAXException

class MyGeneralHandler(handler.ContentHandler):

"""

用户自定义事件处理器

"""

#文档开始事件处理

def startDocument(self):

print 'Document Start...'

#文档结束事件处理

def endDocument(self):

print 'Document End...'

#元素开始事件处理

def startElement(self, name, attrs):

print 'encounter element(%s)' % (name)

#元素结束事件处理

def endElement(self, name):

print 'leave element(%s)' % (name)

#内容事件处理

def characters(self, content):

if content.isspace(): #去掉内容中的空格

return

print 'characters:' + content

try:

parse('students.xml', MyGeneralHandler())

except SAXException, msg:

print msg.getException()

except:

print sys.exc_info()[0],sys.exc_info()[1]

输出:

horen@heart> python sax_demo.py

Document Start...

encounter element(students)

encounter element(student)

encounter element(name)

characters:zhangsan

leave element(name)

encounter element(age)

characters:20

leave element(age)

encounter element(dob)

characters:1990.11.22

leave element(dob)

leave element(student)

encounter element(student)

encounter element(name)

characters:lisi

leave element(name)

encounter element(age)

characters:21

leave element(age)

encounter element(dob)

characters:1992.06.15

leave element(dob)

leave element(student)

leave element(students)

Document End...

参考文档:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值