【问题标题】:Serialize a message format to xml将消息格式序列化为 xml
【发布时间】:2010-03-16 17:39:05
【问题描述】:

我有一个 python 列表

 [
     (A,{'a':1,'b':2,'c':3,'d':4}),
     B,{'a':1,'b':2,'c':3,'d':4}),
     ...
     ]

我想知道是否有将这种列表序列化为 xml 的标准库,或者我应该将其编码到文件中。

编辑:添加细节

假设这是用来构造一个消息,这样

message = A(字段属性{'a':1,'b':2,'c':3,'d':4}) || B 字段属性{'a':1,'b':2,'c':3,'d':4}) || C 字段属性{'a':1,'b':2,'c':3,'d':4})

【问题讨论】:

  • 您说要将其导入 Excel,因此它需要是 XML。它是否需要符合特定格式,或者您可以提供任何格式的 XML 并从那里使用它?
  • 用于导入 Excel 的 XML 意味着 Excel 的 XML 格式。 (*.xlsx)
  • 既然涉及Excel...当您说AB 时,它们应该是行标签吗?是'a''b'等列标签吗?
  • 仍然没有任何解释将您的message = 行与 Excel 或 XML 相关联。
  • 好吧A,B应该是列标签,很难解释。我确实在一定程度上自己解决了这个问题,但通过手动编码 XML,这几乎总是错误的做法。

标签: python xml xml-serialization


【解决方案1】:

它需要是 XML 吗?这是pickle 模块的常用域。

但是,不,没有标准的 serialize-Python-object-to-XML 库。 (我有一个我不久前写的,它没有发布,更不用说“标准”了。)有像 lxml 这样的库,用于将 XML 转换为 Python 对象并返回,还有通常的 saxdom 和 @ 987654325@ 用于读取 XML 的库。

【讨论】:

  • pickle 是不安全的,并且仅限于以单一语言使用。几乎总是有更好的序列化选项。
  • ElementTree 确实是解析和编写 XML 的最佳方式。特别是,对于解析它比使用 saxdom 更好。
  • 它是一个消息模型,需要导出到 Excel,因此使用 XML。
  • @anijhaw:鉴于这种限制,我可以说没有标准库。我什至不确定您的示例如何构成“消息模型”。如果我尝试导入 Excel,我会使用 csv 库,然后使用 Excel 的 CSV 导入。
  • @Mike:没有指定安全性和语言独立性,后者要求输入比给定的 Python list-of-tuples-with-dictionaries 更通用。 pickle 也只需很少的实现工作就可以完成它的工作,远低于ElementTree,后者不是标准模块。这就是为什么我想知道为什么需要 XML ......现在我们来了。
【解决方案2】:

“使用 json/yaml/whitespace”cmets 放在一边(我想你有理由这样做,而不是使用 pickle/json),

您可以尝试非常 Python 的 elementtree 库(在标准库中),甚至可以使用 google 的一些建议:搜索“converting python dictionary to xml”

(不要听起来太粗鲁......眨眼)

看看你的例子,什么是 A 和 B ?整数?字符串?类方法?

【讨论】:

  • :) 我确实检查了元素树,这个列表给出了描述消息的类中的元数据,因此 A、B、C 是消息的字段,并且字典给出了一些特定于字段
【解决方案3】:
  • 为什么要使用 XML?通常有更好的解决方案,例如 JSON,它具有很强的可移植性和标准性。
  • 最简单的方法可能是使用 YAML。 YAML 的主要表示不是 XML,但是有一种规范的方式(YAXML)将 YAML 序列化的数据表示为 XML。

【讨论】:

    猜你喜欢
    • 2020-11-18
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多