python使用expat解析xml

來源:互聯網
上載者:User

python有一些內建的xml解析庫,本文介紹python中的expat庫

expat的特點之一就是支援動態解析xml。何為動態?就是某個xml串並不需要全部輸入給expat,哪怕只是一部分,expat也能感應到響應的事件。事件?比如檢測到新元素出現(實質上是expat遇到了‘<’),或者檢測到某個元素處理完畢(遇到了‘/>’)。所以——expat不一定需要完整的xml就能工作。

看程式

 1 import xml.parsers.expat 2  3 class ExParser(object): 4     '''Parse roster xml''' 5     def __init__(self, xml_raw): 6         '''init parser and setup handlers''' 7         self.parser = xml.parsers.expat.ParserCreate() 8  9         #connect handlers10         self.parser.StartElementHandler = self.start_element11         self.parser.EndElementHandler = self.end_element12         self.parser.CharacterDataHandler = self.char_data13         self.parser.Parse(xml_raw)14         del(xml_raw)15 16     def start_element(self, name, attrs):17         '''Start xml element handler'''18         print 'start:'+name19 20     def end_element(self, name):21         '''End xml element handler'''22         print 'end:'+name23 24     def char_data(self, data):25         '''Char xml element handler'''26         print 'data is '+data

啊分析:

7行 ExParser的構造中定義了一個expat解析器

10-12行 為解析器設定感興趣的回呼函數

13行 開始解析我們的xml

然後就是等待expat解析,一旦expat解析器遇到xml的 元素開始,元素結束,元素值 事件時,會回分別調用start_element, end_element, char_data函數

16行 參數name,attrs 分別代表節點名稱,節點屬性(字典)

20行 參數name代表節點名稱

24行 參數data代表節點資料

拿到這些值後,能做什麼都可以了。

尤其當我們遇到大塊xml資料的時候,可以利用expat動態解析這一點來分塊解析一個大塊。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.