1

如何将 pickle 对象转换为 xml 文档?

例如,我有一个这样的泡菜:

cpyplusplus_test
Coordinate
p0
(I23
I-11
tp1
Rp2
. 

我想得到类似的东西:

<Coordinate>
  <x>23</x>
  <y>-11</y>
</Coordinate>

Coordinate 类当然有 x 和 y 属性。我可以提供一个用于转换的 xml 模式。

我尝试了 gnosis.xml 模块。它可以将 xml 文档对象化为 python 对象。但它不能像上面那样将对象序列化为 xml 文档。

有什么建议吗?

谢谢。

4

2 回答 2

4

gnosis.xml确实支持对 XML 的酸洗:

import gnosis.xml.pickle
xml_str = gnosis.xml.pickle.dumps(obj)

要反序列化 XML,请使用loads

o2 = gnosis.xml.pickle.loads(xml_str)

当然,这不会直接将现有的 pickle 转换为 XML — 您必须首先将它们反序列化为活动对象,然后将它们转储为 XML。

话虽如此,我必须警告你,gnosis.xml它相当缓慢、有些脆弱,而且很可能没有维护(最后一次发布是六年前的事了)。它也非常臃肿,包含大量的子包,其中包含大量的功能,这些功能不仅您不需要,而且未经测试且有缺陷。我们尝试将其用于我们的开发,并且在尝试调试和改进它浪费了大量精力之后,最终编写了一个运行约 500 行代码的简单 XML pickler,并且从未回头。

于 2013-09-17T14:25:28.263 回答
1

首先,您需要通过pickle.load或解开数据pickle.loads。然后生成xml片段。如果tmpStr变量中有泡菜,只需执行以下操作:

c = pickle.loads(tmpStr)
print '<Coordinate>\n<x>%d</x>\n<y>%d</y>\n</Coordinate>' % (c.x, c.y)

写入文件留给读者作为练习。

于 2013-09-17T14:08:14.757 回答