Python3基于sax解析xml操作示例
本文實(shí)例講述了Python3基于sax解析xml操作。分享給大家供大家參考,具體如下:
python使用SAX解析xml
SAX是一種基于事件驅(qū)動(dòng)的API。
利用SAX解析XML文檔牽涉到兩個(gè)部分:解析器和事件處理器。
解析器負(fù)責(zé)讀取XML文檔,并向事件處理器發(fā)送事件,如元素開(kāi)始跟元素結(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/python3
import xml.sax
class MovieHandler( xml.sax.ContentHandler ):
def __init__(self):
self.CurrentData = ""
self.type = ""
self.format = ""
self.year = ""
self.rating = ""
self.stars = ""
self.description = ""
# 元素開(kāi)始調(diào)用
def startElement(self, tag, attributes):
self.CurrentData = tag
if tag == "movie":
print ("*****Movie*****")
title = attributes["title"]
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 = content
if ( __name__ == "__main__"):
# 創(chuàng)建一個(gè) XMLReader
parser = xml.sax.make_parser()
# turn off namepsaces
parser.setFeature(xml.sax.handler.feature_namespaces, 0)
# 重寫(xiě) 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 title="Enemy Behind"> <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 title="Transformers"> <type>Anime, Science Fiction</type> <format>DVD</format> <year>1989</year> <rating>R</rating> <stars>8</stars> <description>A schientific fiction</description> </movie> </collection>
PS:這里再為大家提供幾款關(guān)于xml操作的在線工具供大家參考使用:
在線XML/JSON互相轉(zhuǎn)換工具:
http://tools.jb51.net/code/xmljson
在線格式化XML/在線壓縮XML:
http://tools.jb51.net/code/xmlformat
XML在線壓縮/格式化工具:
http://tools.jb51.net/code/xml_format_compress
XML代碼在線格式化美化工具:
http://tools.jb51.net/code/xmlcodeformat
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Python操作xml數(shù)據(jù)技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門(mén)與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
- Python中將字典轉(zhuǎn)換為XML以及相關(guān)的命名空間解析
- Python Django 命名空間模式的實(shí)現(xiàn)
- Python命名空間的本質(zhì)和加載順序
- Python進(jìn)階_關(guān)于命名空間與作用域(詳解)
- 解讀Python編程中的命名空間與作用域
- python讀取xml文件方法解析
- python解析xml文件方式(解析、更新、寫(xiě)入)
- python實(shí)現(xiàn)XML解析的方法解析
- Python3使用xml.dom.minidom和xml.etree模塊兒解析xml文件封裝函數(shù)的方法
- python解析xml簡(jiǎn)單示例
- Python minidom模塊用法示例【DOM寫(xiě)入和解析XML】
- Python lxml解析HTML并用xpath獲取元素的方法
- python3解析庫(kù)lxml的安裝與基本使用
- Python基于lxml模塊解析html獲取頁(yè)面內(nèi)所有葉子節(jié)點(diǎn)xpath路徑功能示例
- Python利用命名空間解析XML文檔
相關(guān)文章
Python使用moviepy讀取字幕srt文件報(bào)錯(cuò)的解決方法詳解
這篇文章主要為大家詳細(xì)介紹了Python使用moviepy讀取字幕srt文件報(bào)錯(cuò)‘gbk‘?codec?can‘t?decode的兩種解決辦法,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01
python實(shí)現(xiàn)監(jiān)控某個(gè)服務(wù) 服務(wù)崩潰即發(fā)送郵件報(bào)告
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)監(jiān)控某個(gè)服務(wù),服務(wù)崩潰發(fā)送郵件報(bào)告,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
Python數(shù)據(jù)分析處理(三)--運(yùn)動(dòng)員信息的分組與聚合
這篇文章主要介紹了Python數(shù)據(jù)清洗與處理?運(yùn)動(dòng)員信息的分組與聚合,根據(jù)Python數(shù)據(jù)清洗與處理?的相關(guān)資料展開(kāi)運(yùn)動(dòng)員信息的分組與聚合的文章內(nèi)容,需要的朋友可以參考一下2021-12-12
Python?Conda安裝包報(bào)錯(cuò):PackagesNotFoundError兩種解決方法
這篇文章主要給大家介紹了關(guān)于Python?Conda安裝包報(bào)錯(cuò):PackagesNotFoundError的兩種解決方法,這通常意味著安裝程序正在尋找的環(huán)境包沒(méi)有在 conda 的默認(rèn)通道中找到,文中將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06
如何在Python中編寫(xiě)接口和請(qǐng)求外部接口
這篇文章主要介紹了如何在Python中編寫(xiě)接口和請(qǐng)求外部接口,requests庫(kù)來(lái)請(qǐng)求外部接口,按照請(qǐng)求方法分為get請(qǐng)求和post請(qǐng)求,下面和小編一起進(jìn)入文章了解更多的具體內(nèi)容吧2022-02-02
Python爬取YY評(píng)級(jí)分?jǐn)?shù)并保存數(shù)據(jù)實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Python爬取YY評(píng)級(jí)分?jǐn)?shù)并保存數(shù)據(jù)實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
python實(shí)現(xiàn)定時(shí)任務(wù)的八種方式總結(jié)
在日常工作中,我們常常會(huì)用到需要周期性執(zhí)行的任務(wù),下面這篇文章主要給大家介紹了關(guān)于python實(shí)現(xiàn)定時(shí)任務(wù)的八種方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01

