模块从xml创建python对象表示

时间:2008-11-20 20:07:55

标签: python xml pickle

我正在寻找一个易于处理的python本机模块来从xml创建python对象表示。

我通过谷歌找到了几个模块(其中一个是XMLObject),但不想尝试所有这些模块。

您认为做这些事情的最佳方法是什么?

编辑:我没想提到我想要阅读的XML不是由我生成的。它是一个我无法控制的结构中的现有XML文件。

7 个答案:

答案 0 :(得分:12)

你说你想要一个对象表示,我将其解释为表示节点成为对象,并且节点的属性和子节点表示为对象的属性(可能根据某些Schema) )。这就是XMLObject所做的,我相信。

我知道有一些包。 4Suite包含一些执行此操作的工具,我相信Amara专门实现了这一点(建立在4Suite之上)。您也可以使用受{Amara和lxml.objectify启发的gnosis.xml.objectify

当然第三个选项是,给定XML的具体表示(使用ElementTree或lxml),您可以围绕它构建自己的自定义模型。 lxml.html就是一个例子,它扩展了lxml的基本接口,并带有一些特定于HTML的功能。

答案 1 :(得分:5)

我的第二个xml.etree.ElementTree的建议,主要是因为它现在在stdlib中。 还有一个更快的实现,xml.etree.cElementTree也可用。

如果你真的需要表现,我会建议lxml

http://www.ibm.com/developerworks//xml/library/x-hiperfparse/

答案 2 :(得分:3)

我听说最简单的是ElementTree,虽然我很少使用XML,但我无法从经验中说出任何内容。

答案 3 :(得分:3)

还有用于Python的优秀第三方库pyxser

  

pyxser代表Python XML   序列化并且是一个Python对象   到XML序列化器和反序列化器。在   换句话说,它可以转换Python   将对象转换为XML,并转换它   XML回到原始Python   对象

答案 4 :(得分:1)

Python有用于Python对象序列化的pickle和cPickle模块。这两个模块都提供序列化/反序列化Python对象层次结构以转换为字节流的功能:

以下提供类似的接口:pickle(),unpickle()用于序列化到XML /从XML

答案 5 :(得分:1)

我使用(和类似)PyRXP,它创建一个从XML文档构建的元组。

直接XML的主要问题 - > python对象结构是没有用于属性列表的python模拟 - 也就是说,带有元素的列表,也恰好具有属性。如果你愿意,它同时是一个列表和一个字典。

我从PyRXP解析结果,并根据结构创建列表/字典 - 我正在处理的XML是列表或基于属性,而不是两者。 (我正在使用来自已知来源的数据)。

答案 6 :(得分:0)

我对Wai Yip Tung的xml2obj功能有好运:

http://code.activestate.com/recipes/534109-xml-to-python-data-structure/

这是~84行代码。它是原生的纯蟒蛇;使用xml.sax和re(正则表达式)库。你只需传递XML并取回你的对象。