Как изменить имя элемента XML в Django-поршне? - PullRequest
0 голосов
/ 02 декабря 2011

Я новичок в django-поршне, и всякий раз, когда я получаю / публикую данные в xml, элемент xml всегда и <ресурс>

<response>
<resource>
 <resource>4</resource>
 <resource>0</resource>
 <resource>2011-11-30</resource>
</resource>
<resource>
 <resource>4</resource>
 <resource>4</resource>
 <resource>2011-12-01</resource>
</resource>
<resource>
 <resource>4</resource>
 <resource>0</resource>
 <resource>2011-12-02</resource>
</resource>
<resource>
 <resource>4</resource>
 <resource>0</resource>
 <resource>2011-12-03</resource>
</resource>
<resource>
 <resource>4</resource>
 <resource>0</resource>
 <resource>2011-12-04</resource>
</resource>
</response>

есть ли способ изменить это в handlers.py? я просто хочу переместить ресурс в продукт и, если это возможно, могу ли я также добавить идентификатор в элемент xml?

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

Вы должны написать свой собственный XMLEmitter. Вот тот, который всегда использует тег product вместо resource.

Чтобы сделать его умным, требуется немного больше работы, поскольку модели сериализуются в диктовки методом Emitter.construct(), и его невозможно расширить должным образом. Было бы неплохо узнать оригинальный класс модели в методе _to_xml() и назвать элемент на основе имени класса.

from piston.emitters import Emitter, XMLEmitter

class ProductXMLEmitter(XMLEmitter):
    def _to_xml(self, xml, data):
        if isinstance(data, (list, tuple)):
            for item in data:
                attrs = {}
                # if item contains id value, use it as an attribute instead
                if isinstance(item, dict):
                    attrs["id"] = unicode(item.pop("id"))
                xml.startElement("product", attrs)
                self._to_xml(xml, item)
                xml.endElement("product")
        else:
            super(BetterXMLEmitter, self)._to_xml(xml, data)

# replace default XMLEmitter with ours
Emitter.register('xml', ProductXMLEmitter, 'text/xml; charset=utf-8')

Кроме того, вы можете посмотреть на django-поршневую вилку PBS Education по адресу https://github.com/pbs-education/django-piston. Она позволяет вам настроить выход другими способами с помощью PistonViews.

0 голосов
/ 02 декабря 2011

Elementtree поможет вам.Вы можете изменить все, что хотите изменить, прочитать файл, проанализировать его с помощью elementree, обновить значения и снова поместить его в файл (при необходимости).

...