日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Python如何對XML 解析

瀏覽:267日期:2022-07-19 14:13:56

什么是 XML?

XML 指可擴展標記語言(eXtensible Markup Language),標準通用標記語言的子集,是一種用于標記電子文件使其具有結構性的標記語言。 你可以通過本站學習 XML 教程

XML 被設計用來傳輸和存儲數據。

XML 是一套定義語義標記的規則,這些標記將文檔分成許多部件并對這些部件加以標識。

它也是元標記語言,即定義了用于定義其他與特定領域有關的、語義的、結構化的標記語言的句法語言。

Python 對 XML 的解析

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

Python 有三種方法解析 XML,SAX,DOM,以及 ElementTree:

1.SAX (simple API for XML )

Python 標準庫包含 SAX 解析器,SAX 用事件驅動模型,通過在解析 XML 的過程中觸發一個個的事件并調用用戶定義的回調函數來處理 XML 文件。

2.DOM(Document Object Model)

將 XML 數據在內存中解析成一個樹,通過對樹的操作來操作 XML。

本章節使用到的 XML 實例文件 movies.xml 內容如下:

<collection shelf='New Arrivals'><movie> <type>War, Thriller</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> <movie> <type>Anime, Action</type> <format>DVD</format> <episodes>4</episodes> <rating>PG</rating> <stars>10</stars> <description>Vash the Stampede!</description></movie><movie> <type>Comedy</type> <format>VHS</format> <rating>PG</rating> <stars>2</stars> <description>Viewable boredom</description></movie></collection>

Python 使用 SAX 解析 xml

SAX 是一種基于事件驅動的API。

利用 SAX 解析 XML 文檔牽涉到兩個部分: 解析器和事件處理器。

解析器負責讀取 XML 文檔,并向事件處理器發送事件,如元素開始跟元素結束事件。

而事件處理器則負責對事件作出響應,對傳遞的 XML 數據進行處理。

1、對大型文件進行處理; 2、只需要文件的部分內容,或者只需從文件中得到特定信息。 3、想建立自己的對象模型的時候。

在 Python 中使用 sax 方式處理 xml 要先引入 xml.sax 中的 parse 函數,還有 xml.sax.handler 中的 ContentHandler。

ContentHandler 類方法介紹

characters(content) 方法

調用時機:

從行開始,遇到標簽之前,存在字符,content 的值為這些字符串。

從一個標簽,遇到下一個標簽之前, 存在字符,content 的值為這些字符串。

從一個標簽,遇到行結束符之前,存在字符,content 的值為這些字符串。

標簽可以是開始標簽,也可以是結束標簽。

startDocument() 方法

文檔啟動的時候調用。

endDocument() 方法

解析器到達文檔結尾時調用。

startElement(name, attrs) 方法

遇到XML開始標簽時調用,name 是標簽的名字,attrs 是標簽的屬性值字典。

endElement(name) 方法

遇到XML結束標簽時調用。

make_parser 方法

以下方法創建一個新的解析器對象并返回。

xml.sax.make_parser( [parser_list] )

參數說明:

parser_list - 可選參數,解析器列表

parser 方法

以下方法創建一個 SAX 解析器并解析xml文檔:

xml.sax.parse( xmlfile, contenthandler[, errorhandler])

參數說明:

xmlfile - xml文件名 contenthandler - 必須是一個 ContentHandler 的對象 errorhandler - 如果指定該參數,errorhandler 必須是一個 SAX ErrorHandler 對象

parseString 方法

parseString 方法創建一個 XML 解析器并解析 xml 字符串:

xml.sax.parseString(xmlstring, contenthandler[, errorhandler])

參數說明:

xmlstring - xml字符串 contenthandler - 必須是一個 ContentHandler 的對象 errorhandler - 如果指定該參數,errorhandler 必須是一個 SAX ErrorHandler對象

Python 解析XML實例

#!/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 = '' # 元素開始調用 def startElement(self, tag, attributes): self.CurrentData = tag if tag == 'movie': print ('*****Movie*****') title = attributes['title'] print ('Title:', title) # 元素結束調用 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 = '' # 讀取字符時調用 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__'): # 創建一個 XMLReader parser = xml.sax.make_parser() # 關閉命名空間 parser.setFeature(xml.sax.handler.feature_namespaces, 0) # 重寫 ContextHandler Handler = MovieHandler() parser.setContentHandler( Handler ) parser.parse('movies.xml')

以上代碼執行結果如下:

*****Movie*****Title: Enemy BehindType: War, ThrillerFormat: DVDYear: 2003Rating: PGStars: 10Description: Talk about a US-Japan war*****Movie*****Title: TransformersType: Anime, Science FictionFormat: DVDYear: 1989Rating: RStars: 8Description: A schientific fiction*****Movie*****Title: TrigunType: Anime, ActionFormat: DVDRating: PGStars: 10Description: Vash the Stampede!*****Movie*****Title: IshtarType: ComedyFormat: VHSRating: PGStars: 2Description: Viewable boredom

完整的 SAX API 文檔請查閱Python SAX APIs

使用xml.dom解析xml

文件對象模型(Document Object Model,簡稱DOM),是W3C組織推薦的處理可擴展置標語言的標準編程接口。

一個 DOM 的解析器在解析一個 XML 文檔時,一次性讀取整個文檔,把文檔中所有元素保存在內存中的一個樹結構里,之后你可以利用DOM 提供的不同的函數來讀取或修改文檔的內容和結構,也可以把修改過的內容寫入xml文件。

python中用xml.dom.minidom來解析xml文件,實例如下:

#!/usr/bin/python3from xml.dom.minidom import parseimport xml.dom.minidom# 使用minidom解析器打開 XML 文檔DOMTree = xml.dom.minidom.parse('movies.xml')collection = DOMTree.documentElementif collection.hasAttribute('shelf'): print ('Root element : %s' % collection.getAttribute('shelf'))# 在集合中獲取所有電影movies = collection.getElementsByTagName('movie')# 打印每部電影的詳細信息for movie in movies: print ('*****Movie*****') if movie.hasAttribute('title'): print ('Title: %s' % movie.getAttribute('title')) type = movie.getElementsByTagName(’type’)[0] print ('Type: %s' % type.childNodes[0].data) format = movie.getElementsByTagName(’format’)[0] print ('Format: %s' % format.childNodes[0].data) rating = movie.getElementsByTagName(’rating’)[0] print ('Rating: %s' % rating.childNodes[0].data) description = movie.getElementsByTagName(’description’)[0] print ('Description: %s' % description.childNodes[0].data)

以上程序執行結果如下:

Root element : New Arrivals*****Movie*****Title: Enemy BehindType: War, ThrillerFormat: DVDRating: PGDescription: Talk about a US-Japan war*****Movie*****Title: TransformersType: Anime, Science FictionFormat: DVDRating: RDescription: A schientific fiction*****Movie*****Title: TrigunType: Anime, ActionFormat: DVDRating: PGDescription: Vash the Stampede!*****Movie*****Title: IshtarType: ComedyFormat: VHSRating: PGDescription: Viewable boredom

完整的 DOM API 文檔請查閱Python DOM APIs。

以上就是Python如何對XML 解析的詳細內容,更多關于Python對XML 解析的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精精国产xxxx视频在线野外| 亚洲一级影院| 中文一区一区三区免费在线观| 亚洲第一区色| 一区二区视频欧美| 91成人超碰| 亚洲三级网站| 国产精品chinese| 日韩视频一二区| 国产精品成人国产| 精品国产欧美日韩| 久久久久免费av| 美女网站一区| 日韩精彩视频在线观看| 国产精品中文字幕制服诱惑| 91亚洲国产成人久久精品| 国产精品xxx在线观看| 日韩一级欧洲| 亚洲欧美不卡| 青草av.久久免费一区| 国产日韩视频在线| 97人人精品| 欧美三级网址| 欧美日韩a区| 久久av超碰| 麻豆极品一区二区三区| 成人精品久久| 日本午夜大片a在线观看| 欧洲一区二区三区精品| 国产在线不卡| 亚洲一区二区小说| 日韩综合一区| 日韩av一级片| 一区免费在线| 精品国产免费人成网站| 亚洲资源av| 水蜜桃久久夜色精品一区| 伊人国产精品| 日韩国产欧美| 久久99国产精品视频| 日韩av福利| 蜜臀a∨国产成人精品| 欧美国产先锋| 不卡av一区二区| 国产极品久久久久久久久波多结野| 欧美aa国产视频| 亚洲1234区| 给我免费播放日韩视频| 国产精品亚洲四区在线观看| 丝瓜av网站精品一区二区| 欧美午夜精彩| 日韩一区电影| 久久男人天堂| 国产精品.xx视频.xxtv| 日本欧美一区二区| 在线精品国产亚洲| 亚洲精品小说| 五月婷婷亚洲| 国产精品av久久久久久麻豆网| 精品国产精品国产偷麻豆| 国产亚洲精品精品国产亚洲综合| 免费人成在线不卡| 免费成人在线观看| 在线精品视频一区| 日韩久久一区| 久久国产免费看| 国产精品一站二站| 国产精品大片免费观看| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲欧洲一区| 亚洲开心激情| 国产日韩中文在线中文字幕| 日本天堂一区| 国产精品分类| 国产成人精品亚洲日本在线观看| 精品亚洲美女网站| 亚洲免费高清| 欧美偷窥清纯综合图区| 久久不见久久见免费视频7| 荡女精品导航| 国产综合精品一区| 亚洲精品日本| 久久一区精品| 九色porny丨国产首页在线| 三级一区在线视频先锋| 亚洲九九精品| 国产福利亚洲| 亚洲成av人片一区二区密柚| 欧美aa国产视频| 国产香蕉精品| 啪啪国产精品| 日韩精品91亚洲二区在线观看| 精品一区视频| 免费在线看一区| 国产成人精品三级高清久久91 | 久久精品国产网站| 国产精品国产三级国产在线观看| 麻豆视频久久| 欧美成人基地| 国产精品日本一区二区不卡视频 | 亚洲精品看片| 午夜精品成人av| 欧美一级久久| 国产偷自视频区视频一区二区| 国产欧美自拍一区| 一区二区三区四区在线看| 亚洲精品精选| 91久久国产| 91亚洲国产| 久久精品二区亚洲w码| 亚洲精品四区| 国产手机视频一区二区| 日韩成人亚洲| 精品日韩一区| 欧美黄色精品| 欧美日韩99| 日韩福利视频网| 日韩在线观看一区二区三区| 91精品国产调教在线观看| 欧美91在线| 日韩高清不卡一区二区| 亚洲伊人精品酒店| 亚洲一区二区网站| 亚洲高清影视| 日韩影院二区| 麻豆国产91在线播放| 日韩av一区二| 日韩精选在线| 免费一级片91| 免费久久99精品国产自在现线| 久久精品中文| 99热国内精品| 亚洲欧洲午夜| 亚洲免费专区| 亚洲狼人精品一区二区三区| 欧美在线网站| 日韩一区二区三区免费播放| 狠狠久久伊人| 水蜜桃久久夜色精品一区| 欧美精品1区| 精品一区二区三区亚洲| 欧美a在线观看| 四季av一区二区凹凸精品| 国产精品黑丝在线播放| 日本一区二区高清不卡| 成人日韩在线观看| 亚洲高清不卡| 亚洲欧美日韩精品一区二区| 日韩中文字幕亚洲一区二区va在线 | 亚洲精品日本| 国产精品一区二区三区四区在线观看| 青草久久视频| 福利一区在线| 久久久天天操| 日韩视频精品在线观看| 亚洲18在线| 欧美综合精品| 国产aⅴ精品一区二区三区久久| 精品亚洲自拍| 欧美日韩国产在线观看网站| 一区二区三区四区日韩| 美日韩一区二区三区| 麻豆精品国产91久久久久久| 亚洲成人不卡| 少妇精品在线| 亚洲黄色免费看| 中文字幕av亚洲精品一部二部 | 日韩三区免费| 日韩精品亚洲专区| 国产精品专区免费| 免费看欧美美女黄的网站| 国产精品亚洲综合久久| 九九久久电影| 久久久亚洲欧洲日产| 午夜亚洲一区| 精品一区二区三区免费看| 亚洲精品91| 国产精品高颜值在线观看| 亚洲精品国产日韩| 免费欧美一区| 精品视频亚洲| 亚洲精品1区| 亚洲精品88| 精品中文在线| 欧美日一区二区三区在线观看国产免 | 国产精品成人国产| 亚洲精品九九| 午夜久久福利| 久久男人av资源站| 国产亚洲第一伦理第一区| 99国内精品| 久久国产生活片100| 三级久久三级久久久| 国产精品久久久免费| 免费视频一区三区| 免费精品国产的网站免费观看| 中文字幕av一区二区三区四区| 亚洲狼人精品一区二区三区| 亚洲欧洲av| 免费在线亚洲欧美|