如何使用XMLGenerator生成空闭元素?

时间:2011-12-10 09:57:24

标签: python xml django

在django,

addQuickElement(name,content,attr)

像这样生成XML

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

虽然我想生成

<name attr="attr" />

2 个答案:

答案 0 :(得分:2)

只是不要指定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 :(得分:1)

以下是针对这种情况的一些一般性建议,旨在让您以最小的延迟再次行动:

第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步:在像这样的论坛上提问