将python对象转换为XML表示

时间:2011-01-21 09:54:53

标签: python xml django object

在我的数据库中,我有一些需要在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>

3 个答案:

答案 0 :(得分:4)

拥有那个确切的结构有多重要? Django包含一个serialization framework,它可以将查询集转换为XML,但它根本不符合您的格式。

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

答案 1 :(得分:4)

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

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

Django模板doc:

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是具有这些字段(文件名,标题,链接,颜色)的Model上的查询集。

答案 2 :(得分:4)

使用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文档。