【问题标题】:How can I change a Python object into XML?如何将 Python 对象更改为 XML?
【发布时间】:2010-07-26 11:41:17
【问题描述】:

我希望将 Python 对象转换为 XML 数据。我尝试过 lxml,但最终不得不编写自定义代码来将我的对象保存为不完美的 xml。

我正在寻找更像 pyxser 的东西。不幸的是,pyxser xml 代码看起来与我需要的不同。

例如,我有自己的 Person 类

Class Person:
    name = ""
    age = 0
    ids = []

我想把它转换成看起来像这样的 xml 代码

<Person>
    <name>Mike</name>
    <age> 25 </age>
    <ids>
        <id>1234</id>
        <id>333333</id>
        <id>999494</id>
   </ids>
</Person>

我在 lxml.objectify 中没有找到任何接受对象并返回 xml 代码的方法。

【问题讨论】:

标签: python xml xml-serialization


【解决方案1】:

最好是相当主观的,我不确定是否可以在不了解您的要求的情况下说出什么是最好的。不过,Gnosis 已推荐 previously 将 Python 对象序列化为 XML,因此您可能希望从它开始。

来自 Gnosis 主页:

Gnosis Utils 包含几个用于 XML 处理的 Python 模块,以及其他通常有用的工具:

  • xml.pickle(将对象序列化到 XML 或从 XML 序列化)
  • API 与标准 pickle 模块兼容)
  • xml.objectify(将任意 XML 文档转换为 Python 对象)
  • xml.validity(通过 DTD 或 Schema 实施 XML 有效性约束)
  • xml.indexer(全文索引/搜索)
  • 还有更多...

另一个选项是lxml.objectify

【讨论】:

  • 你能添加一个被序列化的类的例子吗?
  • 对于最近的读者来说,gnosis long 已经过时了。我什至无法安装它而不弄乱它的setup.py,然后它无法解析某些东西,寻找语言中不再存在的对象属性。
  • @PavelKomarov 那么最新的库是什么?我只想保存和加载一个python对象,不幸的是我必须使用xml。为什么这么难?我一直在谷歌搜索,似乎没有“3 行或更少”的解决方案
  • 我最终编写了自己的递归解决方案来遍历对象结构,利用 Python 的反射。
【解决方案2】:

迈克,

您可以将对象呈现到 XML 中:

class Person:
  ...
  def toXml( self):
    print '<Person>'
    print '\t<name>...</name>
    ...
    print '</Person>'

或者您可以使用 XSLT 转换 Gnosis 或 pyxser 输出。

【讨论】:

  • 打印文本等同于 XML 与序列化为 XML 不同。
  • 然后序列化一个包含
猜你喜欢
  • 2010-09-29
  • 1970-01-01
  • 2011-01-07
  • 2015-09-12
  • 2022-06-28
  • 2019-09-07
  • 1970-01-01
  • 2019-12-13
  • 2018-05-15
相关资源
最近更新 更多