Python 解析xml有如下幾種方式:
1.SAX (simple API for XML )
Python 標(biāo)準(zhǔn)庫包含 SAX 解析器,SAX 用事件驅(qū)動模型,通過在解析XML的過程中觸發(fā)一個(gè)個(gè)的事件并調(diào)用用戶定義的回調(diào)函數(shù)來處理XML文件。
2.DOM(Document Object Model)
將 XML 數(shù)據(jù)在內(nèi)存中解析成一個(gè)樹,通過對樹的操作來操作XML。
3.ElementTree(元素樹)
ElementTree就像一個(gè)輕量級的DOM,具有方便友好的API。代碼可用性好,速度快,消耗內(nèi)存少。
注:因DOM需要將XML數(shù)據(jù)映射到內(nèi)存中的樹,一是比較慢,二是比較耗內(nèi)存,而SAX流式讀取XML文件,比較快,占用內(nèi)存少,但需要用戶實(shí)現(xiàn)回調(diào)函數(shù)(handler)。
我在工作中想解析roboframework的自動化結(jié)果output.xml文件,提取出case name, 特點(diǎn)是文件大于800M。開始的時(shí)候用的Dom樹方法,比較慢,耗內(nèi)存,直接卡死。
昨天選用了ElementTree的方式,解析很快。下面把解析代碼貼出來:
import xml.etree.ElementTreeas ET
參考:
https://docs.python.org/2/library/xml.etree.elementtree.html