本文實(shí)例講述了Python3基于sax解析xml操作。分享給大家供大家參考,具體如下:
python使用SAX解析xml
SAX是一種基于事件驅(qū)動(dòng)的API。
利用SAX解析XML文檔牽涉到兩個(gè)部分:解析器和事件處理器。
解析器負(fù)責(zé)讀取XML文檔,并向事件處理器發(fā)送事件,如元素開始跟元素結(jié)束事件;
而事件處理器則負(fù)責(zé)對(duì)事件作出相應(yīng),對(duì)傳遞的XML數(shù)據(jù)進(jìn)行處理。
	1、對(duì)大型文件進(jìn)行處理;
	2、只需要文件的部分內(nèi)容,或者只需從文件中得到特定信息。
	3、想建立自己的對(duì)象模型的時(shí)候。
	在python中使用sax方式處理xml要先引入xml.sax中的parse函數(shù),還有xml.sax.handler中的ContentHandler。
saxDemo.py
# -*- coding:utf-8 -*-#!/usr/bin/python3import xml.saxclass MovieHandler( xml.sax.ContentHandler ):  def __init__(self):    self.CurrentData = ""    self.type = ""    self.format = ""    self.year = ""    self.rating = ""    self.stars = ""    self.description = ""  # 元素開始調(diào)用  def startElement(self, tag, attributes):    self.CurrentData = tag    if tag == "movie":      print ("*****Movie*****")      print ("Title:", title)  # 元素結(jié)束調(diào)用  def endElement(self, tag):    if self.CurrentData == "type":      print ("Type:", self.type)    elif self.CurrentData == "format":      print ("Format:", self.format)    elif self.CurrentData == "year":      print ("Year:", self.year)    elif self.CurrentData == "rating":      print ("Rating:", self.rating)    elif self.CurrentData == "stars":      print ("Stars:", self.stars)    elif self.CurrentData == "description":      print ("Description:", self.description)    self.CurrentData = ""  # 讀取字符時(shí)調(diào)用  def characters(self, content):    if self.CurrentData == "type":      self.type = content    elif self.CurrentData == "format":      self.format = content    elif self.CurrentData == "year":      self.year = content    elif self.CurrentData == "rating":      self.rating = content    elif self.CurrentData == "stars":      self.stars = content    elif self.CurrentData == "description":      self.description = contentif ( __name__ == "__main__"):  # 創(chuàng)建一個(gè) XMLReader  parser = xml.sax.make_parser()  # turn off namepsaces  parser.setFeature(xml.sax.handler.feature_namespaces, 0)  # 重寫 ContextHandler  Handler = MovieHandler()  parser.setContentHandler( Handler )  parser.parse("movies.xml")執(zhí)行結(jié)果
*****Movie*****
Title: Enemy Behind
Type: love中國(guó)
Format: DVD
Year: 2003
Rating: PG
Stars: 10
Description: Talk about a US-Japan war
*****Movie*****
Title: Transformers
Type: Anime, Science Fiction
Format: DVD
Year: 1989
Rating: R
Stars: 8
Description: A schientific fiction
運(yùn)行結(jié)果如下圖所示:
movies.xml內(nèi)容:
<?xml version="1.0" encoding="utf-8"?><collection shelf="New Arrivals"><movie <type>love中國(guó)</type> <format>DVD</format> <year>2003</year> <rating>PG</rating> <stars>10</stars> <description>Talk about a US-Japan war</description></movie><movie <type>Anime, Science Fiction</type> <format>DVD</format> <year>1989</year> <rating>R</rating> <stars>8</stars> <description>A schientific fiction</description></movie></collection>
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
新聞熱點(diǎn)
疑難解答
圖片精選