常見的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/