【Python】XML文件解析之SAX(Simple API for XML)

常見的XML編程接口有DOM和SAX,這兩種接口處理XML文件的方式不一樣,固然使用場合也不一樣。html

DOM和SAX的區別python

DOM(Document Object Model):將XML數據在內存中解析成一個樹,經過對樹的操做來操做XML。shell

SAX(Simple API for XML):採用事件驅動模型,經過在解析XML的過程當中觸發一個個的事件並調用用戶定義的回調函數來處理XML文件。編程

因DOM須要將XML數據映射到內存中的樹,一是比較慢,二是比較耗內存,而SAX流式讀取XML文件,比較快,佔用內存少,但須要用戶實現回調函數(handler)。dom

SAX和DOM的使用場合函數

Use DOM when:ui

• read-write access to the document is requiredspa

• the processing requires random access to the documentcode

Use SAX when:orm

• 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:

<?xml version="1.0" encoding="UTF-8"?>
<students>
    <student id="1">
        <name>zhangsan</name>
        <age>20</age>
        <dob>1990.11.22</dob>
    </student>
    <student id="2">
        <name>lisi</name>
        <age>21</age>
        <dob>1992.06.15</dob>
    </student>
</students>

建立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...

 

參考文檔:

官方文檔:http://docs.python.org/library/xml.sax.html?highlight=sax#xml.sax

本文例子:http://gaodayue.com/2012/03/xml-parse-in-python-using-sax/

相關文章
相關標籤/搜索