深度解讀Python示例說明
Python能夠簡單而有效地實現面向對象編程,特別適用于快速應用程序開發,也可以用來開發大規模的重要的商業應用。Python是一個理想的腳本語言,所以深受開發人員的大力支持,下面對Python示例進行解說。
測試結果表明, REXML xml.minidom樣消耗量資源:解析 Hamlet.xml 10 秒,占 14 MB 存;解析 Weblog.xml 190 秒,占 150 MB 存。顯然,編程語言選擇通常優先于庫比較。。
ElementTree 個優點于能夠被循環運行。這指,您以讀入個 XML 實例,修改數據結構使非常類似于本機風格,然調 .write() 進行重新序列化得格式良好 XML。當然,DOM 能做這點,但 gnosis.xml.objectify不行。#t#
gnosis.xml.objectify構造個定制輸出函數于生成 XML 不 那么困難 - 但這不能自動進行。使 ElementTree 以及 ElementTree 實例 .write() ,通過便利函數 elementtree.ElementTree.dump() 以序列化單獨 Element 實例。這讓您以從單獨象節點 - 其包括 XML 實例根節點 - 編 XML 片段。
提出個簡單任務比較 ElementTree gnosis.xml.objectify API。于基準測試型文檔 weblog.xml 包含約 8,500 個 <entry> 元素,每個元素都含有相同子字段集合 - 這個面向數據 XML 文檔典型布局。
處理該文時,任務能從每個 entry 收集些字段,但這只其某些字段有特定值(或范圍,或匹配部分容)。當然,如果您確實只想運行這個任務。使個流 API(如 SAX)以避免存整個文檔建模 - 但這里假定該任務應程序型數據結構運行任務。個 <entry> 元素能像這樣:
- from elementtree
- import ElementTree
- weblog = ElementTree.parse(
- 'weblog.xml').getroot()
- interesting = [entry
- for entry
- in weblog.findall(
- 'entry')
- if entry.find(
- 'host').text==
- '209.202.148.31'
- and
- entry.find(
- 'statusCode').text==
- '200']
- for e
- in interesting:
注意面不同處。 Python子元素節點直接作節點屬性進行連接(每個節點都個根據標記名命名定制類)。另方面, ElementTree 使 Element 類查找子節點。 .findall() 返回所有匹配節點列表; .find() 則僅返回***匹配節點;
返回節點文本容。如果您只想 gnosis.xml.objectify 子元素***匹配,只其建立索引即 - 例如, node.tag[0] 。但如果這樣子元素只有個,那么無需建立顯式索引,您以引用。
但 Python示例,其實您并不 需顯式查找所有 <entry> 元素;迭代時 Element 實例行方式類似于列表。這里注意點,不管子節點有何標記, 所有子節點都進行迭代。相比, gnosis.xml.objectify 節點沒有置遍歷所有子元素。盡管如此,構造個行 children() 函數還挺簡單(發行版包含該函數)。