在python中XML对象序列化,有没有Gnosis的替代方法?

2024-10-08 22:25:29 发布

您现在位置:Python中文网/ 问答频道 /正文

有一段时间我一直在使用一个名为“gnosis-utils”的包,它为Python提供XML pickling服务。这个类运行得相当好,但是在过去的四年里它似乎被开发人员忽视了。在

在我们最初选择gnosis时,它是Python唯一的XML序列化工具。Gnosis的优势在于它提供了一组类,其功能与内置的pythonxml pickler非常相似。它产生了python开发人员认为易于阅读的XML,但非python开发人员却感到困惑。在

现在proejct已经发展壮大,我们有了一个新的需求:我们需要能够与喜欢Java或.Net的同事交换XML。这些非python开发人员将不会使用python—他们打算直接生成XML,因此我们需要简化XML的格式。在

那么,灵知还有其他的选择吗。我们的要求:

  • 必须在python2.4/windowsx86 32位上工作
  • 输出必须是XML,尽可能简单
  • API必须尽可能接近Pickle
  • 表现并不重要

当然,我们可以简单地修改Gnosis,但是我们更愿意使用已经提供了我们所需功能的组件(假设它存在)。在


Tags: 工具功能序列化开发人员utilsxmljava内置
2条回答

那么您要寻找的是一个python库,它为您的对象输出任意的XML?您不需要控制格式,所以您就不必费心编写一些东西来迭代数据的相关属性并使用现有工具生成XML?在

这似乎是个坏主意。任意的XML序列化听起来并不是向前推进的好方法。任何包含pickle所有特性的格式都将变得丑陋、冗长,并且非常讨厌使用。这不会很简单。它不能很好地翻译成Java。在

你的数据是什么样子的?在

如果你告诉我们你需要什么样的泡菜(为什么lxml.objectify我们会更好地帮助你。在

您考虑过使用JSON进行序列化吗?它易于解析,本机支持类似python的数据结构,并且具有广泛的支持。另外一个额外的好处是,它不会像原生pickle模块那样将您的代码公开给各种各样的恶意利用。在

老实说,如果您绝对必须使用XML,那么您需要咬紧牙关,定义一种格式,并使用标准的XML工具构建一个序列化程序。考虑一下JSON。在

有一个^{}提供了将任意Python对象转储到XML的简单方法:

^{1}$

lxml(无论如何,它是xml_marshaller的依赖项)打印以上内容:

^{pr2}$

输出如下:

<marshal>
  <object id="i2" module="__main__" class="Foo">
    <tuple/>
    <dictionary id="i3">
      <string>bar</string>
      <string>baz</string>
    </dictionary>
  </object>
</marshal>

我没有检查python2.4的兼容性,因为这个问题很久以前就有人问过了,但是xml转储任意Python对象的解决方案仍然相关。在

相关问题 更多 >

    热门问题