将Python对象转换为XML表示
在我的数据库里,有一些对象需要以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文档。