我正在尋找一個易於處理的python本地模塊來從xml創建python對象表示。模塊從xml創建python對象表示
我發現了幾個模塊通過谷歌(其中之一是XMLObject),但不想嘗試所有這些。
你認爲做這種事情的最好方法是什麼?
編輯:我錯過了提到,我想讀的XML不是由我生成的。這是一個我無法控制的結構中的現有XML文件。
我正在尋找一個易於處理的python本地模塊來從xml創建python對象表示。模塊從xml創建python對象表示
我發現了幾個模塊通過谷歌(其中之一是XMLObject),但不想嘗試所有這些。
你認爲做這種事情的最好方法是什麼?
編輯:我錯過了提到,我想讀的XML不是由我生成的。這是一個我無法控制的結構中的現有XML文件。
你說你想要一個對象表示,我將解釋這意味着節點成爲對象,並且節點的屬性和子節點被表示爲對象的屬性(可能根據某個模式)。我相信這就是XMLObject所做的。
有一些我知道的軟件包。 4Suite包含一些工具來做到這一點,我相信Amara專門實現這一點(建立在4Suite之上)。您也可以使用lxml.objectify,它受Amara和gnosis.xml.objectify的啓發。
當然,第三種選擇是,給定XML的具體表示形式(使用ElementTree或lxml),您可以圍繞此構建自己的自定義模型。 lxml.html就是一個例子,它擴展了lxml的基本接口和一些特定於HTML的功能。
我聽說最簡單的是ElementTree,雖然我很少使用XML,但我無法從經驗中說出任何話。
我第二個建議xml.etree.ElementTree,主要是因爲它現在在stdlib。 也有一個更快的實現,xml.etree.cElementTree也可用。
如果你真的需要的性能,我建議LXML
http://www.ibm.com/developerworks//xml/library/x-hiperfparse/
Python有泡菜和cPickle的模塊Python對象序列化。這兩個模塊的提供功能序列化/反序列化Python對象層次結構轉換到/從一個字節流:
下面提供類似的接口:泡菜(),unpickle(),用於序列化到/從XML
對不起。我錯過了提到我想要閱讀的XML不是由我生成的。這是一個我無法控制的結構中的現有XML文件。 – Martin 2008-11-21 12:54:58
我使用(以及類似的)PyRXP,它創建了一個從XML文檔構建的元組。
一個直接的XML - > python對象結構的主要問題是沒有用於屬性列表的python模擬 - 也就是包含元素的列表,它也恰好具有屬性。如果你喜歡,它同時是一個列表和一個字典。
我解析PyRXP的結果,並根據結構創建列表/字典 - 我處理的XML是列表或基於屬性的,從來都不是。 (我正在使用來自已知源的數據)。
PyRXP不是原生的python模塊,還是它? – Martin 2008-11-21 12:40:53
還有Python的優秀第三方庫pyxser。
pyxser代表的Python XML 序列化和是一個Python對象 到XML串行器和解串。在 中,也可以將Python對象轉換爲XML,並將該對象轉換回原始的Python 對象。
我有不錯的運氣可在這裏偉業東的xml2obj功能:
http://code.activestate.com/recipes/534109-xml-to-python-data-structure/
這是〜84行的代碼。它是本地和純粹的Python;使用xml.sax和re(正則表達式)庫。你只需將它傳遞給XML並找回你的對象。
你只是想要序列化一個對象?或者XML是一個很難的要求? – 2008-11-20 22:18:43
我需要讀取現有的XML文件 - 所以XML是一個硬性要求 – Martin 2008-11-21 12:34:25