2008-11-20 67 views
8

我正在尋找一個易於處理的python本地模塊來從xml創建python對象表示。模塊從xml創建python對象表示

我發現了幾個模塊通過谷歌(其中之一是XMLObject),但不想嘗試所有這些。

你認爲做這種事情的最好方法是什麼?

編輯:我錯過了提到,我想讀的XML不是由我生成的。這是一個我無法控制的結構中的現有XML文件。

+0

你只是想要序列化一個對象?或者XML是一個很難的要求? – 2008-11-20 22:18:43

+0

我需要讀取現有的XML文件 - 所以XML是一個硬性要求 – Martin 2008-11-21 12:34:25

回答

12

你說你想要一個對象表示,我將解釋這意味着節點成爲對象,並且節點的屬性和子節點被表示爲對象的屬性(可能根據某個模式)。我相信這就是XMLObject所做的。

有一些我知道的軟件包。 4Suite包含一些工具來做到這一點,我相信Amara專門實現這一點(建立在4Suite之上)。您也可以使用lxml.objectify,它受Amara和gnosis.xml.objectify的啓發。

當然,第三種選擇是,給定XML的具體表示形式(使用ElementTree或lxml),您可以圍繞此構建自己的自定義模型。 lxml.html就是一個例子,它擴展了lxml的基本接口和一些特定於HTML的功能。

3

我聽說最簡單的是ElementTree,雖然我很少使用XML,但我無法從經驗中說出任何話。

1

Python有泡菜和cPickle的模塊Python對象序列化。這兩個模塊的提供功能序列化/反序列化Python對象層次結構轉換到/從一個字節流:

下面提供類似的接口:泡菜(),unpickle(),用於序列化到/從XML

+0

對不起。我錯過了提到我想要閱讀的XML不是由我生成的。這是一個我無法控制的結構中的現有XML文件。 – Martin 2008-11-21 12:54:58

1

我使用(以及類似的)PyRXP,它創建了一個從XML文檔構建的元組。

一個直接的XML - > python對象結構的主要問題是沒有用於屬性列表的python模擬 - 也就是包含元素的列表,它也恰好具有屬性。如果你喜歡,它同時是一個列表和一個字典。

我解析PyRXP的結果,並根據結構創建列表/字典 - 我處理的XML是列表或基於屬性的,從來都不是。 (我正在使用來自已知源的數據)。

+0

PyRXP不是原生的python模塊,還是它? – Martin 2008-11-21 12:40:53

3

還有Python的優秀第三方庫pyxser

pyxser代表的Python XML 序列化和是一個Python對象 到XML串行器和解串。在 中,也可以將Python對象轉換爲XML,並將該對象轉換回原始的Python 對象。