本篇內(nèi)容主要講解“Python解析XML實例分享”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Python解析XML實例分享”吧!
站在用戶的角度思考問題,與客戶深入溝通,找到姚安網(wǎng)站設(shè)計與姚安網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都做網(wǎng)站、網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國際域名空間、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋姚安地區(qū)。
常見的 XML 編程接口有 DOM 和 SAX,這兩種接口處理 XML 文件的方式不同,使用場景也不同。
Python有三種方法解析XML,分別是SAX、DOM和ElementTree:
SAX:Python 標(biāo)準(zhǔn)庫包含 SAX 解析器,SAX 用事件驅(qū)動模型,通過在解析 XML 的過程中觸發(fā)一個個的事件并調(diào)用用戶定義的回調(diào)函數(shù)來處理 XML 文件。
DOM:將 XML 數(shù)據(jù)在內(nèi)存中解析成一個樹,通過對樹的操作來操作 XML。
ElementTree:ElementTree(元素樹)就像一個輕量級的DOM,具有方便友好的API。代碼可用性好,速度快,消耗內(nèi)存少。
因DOM需要將XML數(shù)據(jù)映射到內(nèi)存中的樹,會比較慢和消耗內(nèi)存,而SAX流式讀取XML文件,比較快,占用內(nèi)存少,但需要用戶實現(xiàn)回調(diào)函數(shù)(handler)。
本章節(jié)使用到的 XML 實例文件movies.xml內(nèi)容如下:
<collection shelf="新品推薦"> <movie title="重返二十歲"> <type>喜劇,親情,愛情,奇幻</type> <format>DVD</format> <year>2014</year> <rating>PG</rating> <stars>8</stars> <description>影片講述了一位七旬老太太不可思議變身為妙齡女子后,以新身份回到日常生活,引發(fā)的一系列啼笑皆非的奇幻故事</description> </movie> <movie title="流浪地球"> <type>科幻、災(zāi)難、冒險、動作</type> <format>DVD</format> <year>2019</year> <rating>R</rating> <stars>10</stars> <description>講述了太陽即將毀滅,已經(jīng)不適合人類生存,而面對絕境,人類將開啟“流浪地球”計劃 </description> </movie> <movie title="惡棍天使"> <type>喜劇,愛情</type> <format>DVD</format> <year>2015</year> <rating>PG</rating> <stars>10</stars> <description>講述了高智商低情商女學(xué)霸查小刀遇到專職替人討債的惡棍莫非里,倆人在神醫(yī)折耳根的介紹下互相“治療”發(fā)生的一系列故事</description> </movie> <movie title="戰(zhàn)狼"> <type>動作,戰(zhàn)爭,軍事</type> <format>VHS</format> <year>2015</year> <rating>PG</rating> <stars>10</stars> <description>講述的是小人物成長為拯救國家和民族命運的孤膽英雄的傳奇故事</description> </movie> </collection>
SAX 是一種基于事件驅(qū)動的API。利用 SAX 解析 XML 文檔牽涉到兩個部分,解析器和事件處理器。解析器負(fù)責(zé)讀取 XML 文檔,并向事件處理器發(fā)送事件,如元素開始跟元素結(jié)束事件。而事件處理器則負(fù)責(zé)對事件作出響應(yīng),對傳遞的 XML 數(shù)據(jù)進(jìn)行處理。
在 Python 中使用 sax 方式處理 xml 要先引入 xml.sax 中的 parse 函數(shù),還有 xml.sax.handler 中的 ContentHandler。
characters(content)
方法:
從行開始,遇到標(biāo)簽之前,存在字符,content 的值為這些字符串。 從一個標(biāo)簽,遇到下一個標(biāo)簽之前, 存在字符,content 的值為這些字符串。 從一個標(biāo)簽,遇到行結(jié)束符之前,存在字符,content 的值為這些字符串。 標(biāo)簽可以是開始標(biāo)簽,也可以是結(jié)束標(biāo)簽。
startDocument()
方法:文檔啟動的時候調(diào)用。
endDocument()
方法:解析器到達(dá)文檔結(jié)尾時調(diào)用。
startElement(name, attrs)
方法:遇到XML開始標(biāo)簽時調(diào)用,name 是標(biāo)簽的名字,attrs 是標(biāo)簽的屬性值字典。
endElement(name)
方法:遇到XML結(jié)束標(biāo)簽時調(diào)用。
make_parser()方法用于創(chuàng)建一個新的解析器對象并返回。創(chuàng)建的解析器對象將是系統(tǒng)找到的第一個解析器類型。
語法如下:
xml.sax.make_parser(parser_list) parser_list -- 可選參數(shù),解析器列表
parser ()方法用于創(chuàng)建一個 SAX 解析器并解析xml文檔。
語法如下:
xml.sax.parse( xmlfile, contenthandler[, errorhandler]) xmlfile -- xml文件名 contenthandler -- 必須是一個ContentHandler對象 errorhandler -- 如果指定該參數(shù),errorhandler必須是一個SAX ErrorHandler對象
parseString()方法創(chuàng)建一個 XML 解析器并解析 xml 字符串。
語法如下:
xml.sax.parseString(xmlstring, contenthandler[, errorhandler]) xmlstring -- xml字符串 contenthandler -- 必須是一個ContentHandler的對象 errorhandler -- 如果指定該參數(shù),errorhandler必須是一個SAX ErrorHandler對象
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 = "" # 元素開始調(diào)用 def startElement(self, tag, attributes): self.CurrentData = tag if tag == "movie": print("-----電影信息介紹-----") title = attributes["title"] print("Title:", title) # 元素結(jié)束調(diào)用 def endElement(self, tag): if self.CurrentData == "type": print("類型:", self.type) elif self.CurrentData == "format": print("格式:", self.format) elif self.CurrentData == "year": print("時間:", self.year) elif self.CurrentData == "rating": print("評級:", self.rating) elif self.CurrentData == "stars": print("星星:", self.stars) elif self.CurrentData == "description": print("描述:", self.description, "\n") self.CurrentData = "" # 讀取字符時調(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)建一個 XMLReader parser = xml.sax.make_parser() # 關(guān)閉命名空間 parser.setFeature(xml.sax.handler.feature_namespaces, 0) # 重寫 ContextHandler Handler = MovieHandler() parser.setContentHandler(Handler) parser.parse("movies.xml")
運行程序后輸出結(jié)果如下:
-----電影信息介紹----- Title: 重返二十歲 類型: 喜劇,親情,愛情,奇幻 格式: DVD 時間: 2014 評級: 7歲以上可以觀看 星星: 8 描述: 影片講述了一位七旬老太太不可思議變身為妙齡女子后,以新身份回到日常生活,引發(fā)的一系列啼笑皆非的奇幻故事 -----電影信息介紹----- Title: 流浪地球 類型: 科幻、災(zāi)難、冒險、動作 格式: DVD 時間: 2019 評級: R 星星: 10 描述: 講述了太陽即將毀滅,已經(jīng)不適合人類生存,而面對絕境,人類將開啟“流浪地球”計劃 -----電影信息介紹----- Title: 惡棍天使 類型: 喜劇,愛情 格式: DVD 時間: 2015 評級: PG 星星: 10 描述: 講述了高智商低情商女學(xué)霸查小刀遇到專職替人討債的惡棍莫非里,倆人在神醫(yī)折耳根的介紹下互相“治療”發(fā)生的一系列故事 -----電影信息介紹----- Title: 戰(zhàn)狼 類型: 動作,戰(zhàn)爭,軍事 格式: VHS 時間: 2015 評級: PG 星星: 10 描述: 講述的是小人物成長為拯救國家和民族命運的孤膽英雄的傳奇故事
文檔對象模型是來自W3C的跨語言API,用于訪問和修改XML文檔。
DOM解析器在解析一個XML文檔時,一次性讀取整個文檔,把文檔中所有元素保存在內(nèi)存中的一個樹結(jié)構(gòu)里。之后可以利用DOM 提供的不同的函數(shù)來讀取或修改文檔的內(nèi)容和結(jié)構(gòu),也可以把修改過的內(nèi)容寫入xml文件。
使用xml.dom.minidom來解析xml文件時,minidom對象提供了一種簡單的解析器方法,可以從XML文件中快速創(chuàng)建DOM樹。
from xml.dom.minidom import parse import xml.dom.minidom # 使用minidom解析器打開XML文檔 DOMTree = xml.dom.minidom.parse("movies.xml") collection = DOMTree.documentElement if collection.hasAttribute("shelf"): print ("根元素 : %s" % collection.getAttribute("shelf")) # 在集合中獲取所有電影 movies = collection.getElementsByTagName("movie") # 打印每部電影的詳細(xì)信息 for movie in movies: print ("-----電影信息介紹-----") if movie.hasAttribute("title"): print ("標(biāo)題: %s" % movie.getAttribute("title")) type = movie.getElementsByTagName('type')[0] print ("類型: %s" % type.childNodes[0].data) format = movie.getElementsByTagName('format')[0] print ("格式: %s" % format.childNodes[0].data) rating = movie.getElementsByTagName('rating')[0] print ("等級: %s" % rating.childNodes[0].data) stars = movie.getElementsByTagName('stars')[0] print("星星: %s" % stars.childNodes[0].data) description = movie.getElementsByTagName('description')[0] print ("描述: %s" % description.childNodes[0].data, "\n")
運行程序后輸出結(jié)果如下:
根元素 : 新品推薦 -----電影信息介紹----- 標(biāo)題: 重返二十歲 類型: 喜劇,親情,愛情,奇幻 格式: DVD 等級: PG 星星: 8 描述: 影片講述了一位七旬老太太不可思議變身為妙齡女子后,以新身份回到日常生活,引發(fā)的一系列啼笑皆非的奇幻故事 -----電影信息介紹----- 標(biāo)題: 流浪地球 類型: 科幻、災(zāi)難、冒險、動作 格式: DVD 等級: R 星星: 10 描述: 講述了太陽即將毀滅,已經(jīng)不適合人類生存,而面對絕境,人類將開啟“流浪地球”計劃 -----電影信息介紹----- 標(biāo)題: 惡棍天使 類型: 喜劇,愛情 格式: DVD 等級: PG 星星: 10 描述: 講述了高智商低情商女學(xué)霸查小刀遇到專職替人討債的惡棍莫非里,倆人在神醫(yī)折耳根的介紹下互相“治療”發(fā)生的一系列故事 -----電影信息介紹----- 標(biāo)題: 戰(zhàn)狼 類型: 動作,戰(zhàn)爭,軍事 格式: VHS 等級: PG 星星: 10 描述: 講述的是小人物成長為拯救國家和民族命運的孤膽英雄的傳奇故事
到此,相信大家對“Python解析XML實例分享”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
文章題目:Python解析XML實例分享
網(wǎng)站路徑:http://muchs.cn/article18/pidigp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、外貿(mào)建站、網(wǎng)頁設(shè)計公司、品牌網(wǎng)站制作、定制開發(fā)、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)