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