Python pickle到xml

Python pickle到xml,python,xml,pickle,Python,Xml,Pickle,如何将pickle对象转换为xml文档 例如,我有一个这样的泡菜: cpyplusplus_test Coordinate p0 (I23 I-11 tp1 Rp2 . 我想得到这样的东西: <Coordinate> <x>23</x> <y>-11</y> </Coordinate> 坐标类当然有x和y属性。我可以提供用于转换的xml模式 我尝试了gnosis.xml模块。它可以将xml文档对象化为pytho

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

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

cpyplusplus_test
Coordinate
p0
(I23
I-11
tp1
Rp2
. 
我想得到这样的东西:

<Coordinate>
  <x>23</x>
  <y>-11</y>
</Coordinate>
坐标类当然有x和y属性。我可以提供用于转换的xml模式

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

有什么建议吗


谢谢。

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

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

写入文件是留给读者的一个练习。

首先,您需要通过pickle.load或pickle.load取消对数据的勾选。然后生成xml片段。如果tmpStr变量中有pickle,只需执行以下操作:

c = pickle.loads(tmpStr)
print '<Coordinate>\n<x>%d</x>\n<y>%d</y>\n</Coordinate>' % (c.x, c.y)
将写入文件作为练习留给读者。

gnosis.xml确实支持对xml进行酸洗:

import gnosis.xml.pickle
xml_str = gnosis.xml.pickle.dumps(obj)
要反序列化XML,请使用加载:

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

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

gnosis.XML确实支持对XML的pickle:

import gnosis.xml.pickle
xml_str = gnosis.xml.pickle.dumps(obj)
要反序列化XML,请使用加载:

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


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

你能显示创建此pickle的代码吗?@alecxe代码在这里:cord=pyplusplus_test.Coordinate10,10 cord.x=23 cord.y=-11 tmpStr=pickle.dumpscord print tmpStr你能显示创建此pickle的代码吗?@alecxe代码在这里:cord=pyplusplus_test.Coordinate10,10 cord.x=23 cord.y=-11tmpStr=pickle.dumpscord print tmpStrI不想将xml代码嵌入脚本。我想使用类似于serializationManager.serializec、“c.xml”的方法调用自动序列化对象。我不想将xml代码嵌入脚本。我想使用类似于serializationManager.serializec,“c.xml”的方法调用自动序列化对象。没错,gnosis支持对xml的pickling。但有两个问题。首先,它的XML模式不是面向类的。例如,字符串成员序列化为,但是,我想abc@QQ如果您的XML语法是固定的,那么gnosis.XML显然没有多大用处,而且我相当确定您必须编写自己的序列化程序。至于rawpickle,很可能是因为gnosis.xml不知道如何序列化类,而让pickle来完成。要解决这个问题,您需要编写gnosis.xml扩展。有一些文档说明了如何做到这一点,但这仍然无法解决您的第一个问题。最后,我的回答最后一段中关于gnosis.xml的警告仍然适用。谢谢@user4815162342我的主要目标是在python和其他语言之间找到一种通用的数据交换格式。C++、C等。我为不同语言从同一模型生成类声明。但是,在python脚本和用不同语言编写的程序之间以xml格式共享对象似乎是不可能的。@QQ您在问题中没有提到这一点,但现在您提到了,事情变得越来越清楚了。它必须是XML吗?json在Python中运行良好,在其他语言中并不完全未知。我刚刚试图澄清这个问题。我测试了json一点。在执行方面存在一些问题。但我想再问一个问题可能会更好。谢谢@user4815162342你说得对,gnosis支持对XML的酸洗。但有两个问题。首先,它的XML模式不是面向类的。例如,字符串成员序列化为,但是,我想abc@QQ如果您的XML语法是固定的,那么gnosis.XML显然没有多大用处,而且我相当确定您必须编写自己的序列化程序。至于rawpickle,很可能是因为gnosis.xml不知道如何序列化类,而让pickle来完成。要解决这个问题,哟
您将需要编写gnosis.xml扩展。有一些文档说明了如何做到这一点,但仍然无法解决您的第一个问题。最后,我的回答最后一段中关于gnosis.xml的警告仍然适用。谢谢@user4815162342我的主要目标是在python和其他语言之间找到一种通用的数据交换格式。C++、C等。我为不同语言从同一模型生成类声明。但是,在python脚本和用不同语言编写的程序之间以xml格式共享对象似乎是不可能的。@QQ您在问题中没有提到这一点,但现在您提到了,事情变得越来越清楚了。它必须是XML吗?json在Python中运行良好,在其他语言中并不完全未知。我刚刚试图澄清这个问题。我测试了json一点。在执行方面存在一些问题。但我想再问一个问题可能会更好。谢谢@user4815162342