将Python对象转换为XML表示

2 投票
3 回答
6030 浏览
提问于 2025-04-16 10:22

在我的数据库里,有一些对象需要以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 个回答

4

如果真的这么简单,而且你有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是一个包含这些字段(文件名、标题、链接、颜色)的模型的查询集。

4

这个结构有多重要呢?Django 提供了一个 序列化框架,可以把查询结果转换成 XML 格式,但这个格式和你想要的完全不一样。

如果想要符合你的格式,你就得手动写代码。对此,我觉得最简单的方法是写一个模型方法,这个方法可以输出一个实例的所需格式,然后在循环中对查询结果的每个成员调用这个方法。

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

撰写回答