Преобразовать объект Python в представление XML - PullRequest
2 голосов
/ 21 января 2011

В моей базе данных есть несколько объектов, которые должны быть представлены в 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 голосов
/ 21 января 2011

Если это действительно так просто, и у вас есть доступный django (я вижу ваш тег), используйте шаблон Django!

Есть несколько примеров на django docs и в блогосфере в целом.Если это отправляется как ответ, то вам также нужно установить заголовок 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 - это набор запросов для Модели с этими полями (имя файла, заголовок, ссылка, цвет).

4 голосов
/ 21 января 2011

Используйте строку . Шаблон .

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-фрагментов.

4 голосов
/ 21 января 2011

Насколько важно иметь такую ​​точную структуру?Django включает инфраструктуру сериализации , которая может конвертировать наборы запросов в XML, но он совсем не соответствует вашему формату.

В противном случае вам нужно будет написать это вручную - для этого я считаю, что проще всего написать метод модели, который может вывести один экземпляр в нужном формате, а затем вызвать его для каждого члена набора запросов в цикле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...