【问题标题】:How to generate empty closed element use XMLGenerator?如何使用 XMLGenerator 生成空的封闭元素?
【发布时间】:2011-12-10 09:57:23
【问题描述】:

在 django 中,

addQuickElement(name,content,attr)

像这样生成 XML

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

虽然我想生成

<name attr="attr" />

【问题讨论】:

    标签: python xml django


    【解决方案1】:

    只是不要指定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 中,XMLGenerator.__init__ 中添加了一个参数 short_empty_elements,但 Django 不仅兼容使用 Python 2.x。如果您关心获得短标签,请查看 xml.sax.saxutils.XMLGenerator.startElement 实现。)

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 手册中没有此类内容。
      • @SuYanqian:对不起;我应该说“如果第 1 步有效,则无需尝试第 2 步和第 3 步”。
      • 第 2b 步:阅读更完整的代码。它会准确地告诉你它的作用。
      • @ChrisMorgan:同意,如果你有任何代码......有些包似乎使用仅包含 .pyc 文件的鸡蛋。
      • @ChrisMorgan 在问这个问题之前,我已经阅读了源代码并尝试编写一些示例,但我仍然不知道像&lt;name attr="attr" /&gt; 这样的生成格式的方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-20
      • 2012-05-07
      • 2021-03-28
      • 2010-12-12
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多