我正在寻找一个易于处理的python本机模块来从xml创建python对象表示。
我通过谷歌找到了几个模块(其中一个是XMLObject),但不想尝试所有这些模块。
您认为做这些事情的最佳方法是什么?
编辑:我没想提到我想要阅读的XML不是由我生成的。它是一个我无法控制的结构中的现有XML文件。
答案 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并取回你的对象。