【问题标题】:do not collapse empty nodes in XML output不要折叠 XML 输出中的空节点
【发布时间】:2014-05-05 14:34:40
【问题描述】:

我正在使用 python 的xml.etree.ElementTree 来表示 XML 文档。我想将其输出为文本,但我想保持空元素(没有子元素的元素)展开,而不是折叠。例如,我想要这个:

<element></element>

而不是这个:

<element />

我目前正在使用ElementTree.tostring,但我愿意使用任何其他内置的 python 模块或函数来序列化文档,只要我可以很容易地使用 ElementTree 对象。

仅供参考,我想让元素保持扩展的原因是因为我想更轻松地将输出与不会折叠空元素的第三方程序的输出进行比较。

【问题讨论】:

    标签: python xml xml.etree


    【解决方案1】:

    您可以将method="html" 传递给tostring() 调用。

    演示:

    >>> import xml.etree.ElementTree as etree
    >>> data = """
    ... <root>
    ...     <person/>
    ...     <person></person>
    ... </root>
    ... """
    >>> tree = etree.fromstring(data)
    >>> print etree.tostring(tree, method="html")
    <root>
        <person></person>
        <person></person>
    </root>
    

    【讨论】:

    • 很遗憾,html 输出方法没有正确保留标签的大小写。例如,如果您有一个混合大小写的标签,如“peasantFarmer”,则开始标签是正确的,但结束标签是“peasantfarmer”(注意小写“f”)。不确定这是一个错误还是故意的,因为 HTML 应该不区分大小写(尽管我认为标签对仍然需要匹配)。
    【解决方案2】:

    只需使用:ElementTree.tostring(element, short_empty_elements=False)

    【讨论】:

    • 这也适用于将整个文档保存到文件 tree.write(file_name, encoding="UTF-8", short_empty_elements=False)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 2012-08-28
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多