Как создать пустой закрытый элемент с использованием XMLGenerator? - PullRequest
1 голос
/ 10 декабря 2011

В Джанго

addQuickElement(name,content,attr)

генерирует XML как этот

<name attr="attr">content</name>

Пока я хочу сгенерировать

<name attr="attr" />

Ответы [ 2 ]

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

Только не указывайте аргумент contents.

Для справки: django/utils/xmlutils.py:

"""
Utilities for XML generation/parsing.
"""

from xml.sax.saxutils import XMLGenerator

class SimplerXMLGenerator(XMLGenerator):
    def addQuickElement(self, name, contents=None, attrs=None):
        "Convenience method for adding an element with no children"
        if attrs is None: attrs = {}
        self.startElement(name, attrs)
        if contents is not None:
            self.characters(contents)
        self.endElement(name)

Здесь вы видите, что вам просто не нужно указывать contents, и поэтому вы можете сделать x.addQuickElement(name, attrs=attrs).

(Беглый взгляд на XMLGenerator показывает, что он все равно будет производить конечный тег, а не самозакрывающийся тег. В Python 3.2 аргумент short_empty_elements был добавлен к XMLGenerator.__init__, но Django по-прежнему не только совместим с Python 2.x. Если вы хотите получить короткие теги, взгляните на реализацию xml.sax.saxutils.XMLGenerator.startElement.)

1 голос
/ 10 декабря 2011

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

Шаг 1: Попробуйте что-нибудь правдоподобное.В этом случае:

addQuickElement(name, None, attr)

Шаг 2: Используйте справку, например:

>>> help(whatever.addQuickElement)
Help on function addQuickElement in module whatever:

addQuickElement(self, name, contents=None, attrs=None)
                            ^^^^^^^^^^^^^

Шаг 3: Прочитайте фантастическое руководство

Шаг 4: Задайте вопросвопрос на форуме вроде этого

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