【问题标题】:Convert python object to XML representation将 python 对象转换为 XML 表示
【发布时间】:2011-01-21 09:54:53
【问题描述】:

在我的数据库中,我有一些需要在 xml 文件中表示的对象。将项目对象转换为项目的 xml 表示的最简单/最简单的方法是什么?我应该使用什么 python 库?

<items>
    <item>
        <picture><![CDATA[foo.jpg]]></picture>
        <title><![CDATA[Foo]]></title>
        <link><![CDATA[http://www.foo.com]]></link>
    <color><![CDATA[red]]></color>
    </item>

    <item>
        <picture><![CDATA[baz.jpg]]></picture>
        <title><![CDATA[Baz]]></title>
        <link><![CDATA[http://www.baz.com]]></link>
    <color><![CDATA[blue]]></color>
    </item>
</items>

【问题讨论】:

标签: python xml django object


【解决方案1】:

拥有这种精确的结构有多重要? Django 包含一个serialization framework,它可以将查询集转换为 XML,但它与您的格式完全不匹配。

否则您将需要手动编写它 - 为此我发现编写一个模型方法是最简单的,它可以以所需格式输出单个实例,然后在循环中对查询集的每个成员调用它。

【讨论】:

  • 我正在做的Django项目使用的是1.0.2版本的Django,所以恐怕无法使用序列化框架。我必须找到一个 python 库或进行自定义实现。
  • 为什么不呢?序列化早在 1.0 之前就已经在 Django 中了。 Here 是 1.0 的序列化文档,与 1.2 的没有太大区别。
  • +1 用于将 Seitaridis 引导至相关文档。真酷。
  • 对不起。在序列化框架的链接中,我看到了“本文档描述了 Django 1.2”。我相信这是 Django 1.2 附带的一个新功能。我试试看
  • 提供的链接已损坏
【解决方案2】:

如果真的那么简单,并且你有 django 可用(我看到你的标签),请使用 Django 模板!

在 django 文档和整个博客圈中都有一些示例。如果这是作为响应发送的,那么您还必须设置 HttpResponse 标头。很标准的东西!

Django 模板文档:

http://docs.djangoproject.com/en/1.2/topics/templates/

对于您的情况,创建一个这样的模板,并传递一个查询集“q”,然后:

<xml>
<items>
   {% for p in q %}
    <item>
        <picture><![CDATA[{{p.filename}}]]></picture>
        <title><![CDATA[{{p.title}}]]></title>
        <link><![CDATA[{{p.link}}]]></link>
    <color><![CDATA[{{p.color}}]]></color>
    </item>
   {% endfor %}
</items>

假设 q 是具有这些字段(文件名、标题、链接、颜色)的模型上的查询集。

【讨论】:

    【解决方案3】:

    使用string.Template 类。

    import string
    item_template = string.Template( """<item>
        <picture><![CDATA[$a]]></picture>
        <title><![CDATA[$b]]></title>
        <link><![CDATA[$c]]></link>
    <color><![CDATA[$d]]></color>
    </item>""")
    item = item_template( a="foo.jpg", b="Foo", c="http://www.foo.com", d="red" )
    

    然后您应该能够按如下方式构建项目列表:

    item_list= string.Template( "<items>$item_list</items>" )
    item_list.substitute( item_list= "\n".join( some_list_of_item_strings ) )
    

    这种东西可以从非 XML 片段构建正确的 XML 文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 2011-03-11
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多