8

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

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

你认为做这些事情的最好方法是什么?

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

4

7 回答 7

12

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

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

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

于 2008-11-20T22:40:50.370 回答
5

我支持 xml.etree.ElementTree 的建议,主要是因为它现在在标准库中。还有一个更快的实现,xml.etree.cElementTree 也可用。

如果你真的需要性能,我会建议 lxml

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

于 2008-11-20T20:22:11.477 回答
3

我听说最简单的是ElementTree,虽然我很少使用 XML 并且我不能从经验中说任何话。

于 2008-11-20T20:12:08.843 回答
3

还有用于 Python 的优秀的 3rd 方库pyxser

pyxser 代表 Python XML 序列化,是 XML 序列化器和反序列化器的 Python 对象。换句话说,它可以将 Python 对象转换为 XML,也可以将该 XML 转换回原始 Python 对象。

于 2010-09-02T23:03:20.820 回答
1

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

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

于 2008-11-20T20:43:35.630 回答
1

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

直接 XML -> python 对象结构的主要问题是属性列表没有 python 模拟 - 即带有元素的列表,它也恰好具有属性。如果您愿意,它既是列表又是字典。

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

于 2008-11-20T22:09:16.987 回答
0

Wai Yip Tung 的 xml2obj 函数在这里可用,我很幸运:

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

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

于 2011-08-15T18:34:20.363 回答