首页 > 解决方案 > 使用 lxml 和 xmlfile 从 python 创建漂亮打印的增量生成的 XML

问题描述

我正在使用 lxml 的增量 XML 生成来动态生成 XML。然而,尽管您添加到输出中的 XML 元素块可以(并且)在请求时打印得很漂亮,但根元素周围有一个区域会变得很奇怪。

我正在使用的测试代码如下所示:-

from lxml import etree


def writer(filename):
    with etree.xmlfile(filename, encoding="ISO-8859-1", close=True) as xf:
        xf.write_declaration()
        xf.write_doctype("<!DOCTYPE myDoctype>")
        with xf.element("myDoc", version="1.0"):
            while True:
                el = yield
                xf.write(el, pretty_print=True)
                xf.flush()


output = writer("test.xml")
next(output)

for x in range(3):
    el = etree.Element("data", number=str(x))
    se = etree.SubElement(el, "item")
    se.text = f"item {str(x)}"
    output.send(el)

这给出了如下所示的输出:-

<?xml version='1.0' encoding='ISO-8859-1'?>
<!DOCTYPE myDoctype>
<myDoc version="1.0"><data number="0">
  <item>item 0</item>
</data>
<data number="1">
  <item>item 1</item>
</data>
<data number="2">
  <item>item 2</item>
</data>
</myDoc>

其中第 3 行的根和第一个数据元素位于同一行。

不幸的是,对于我正在构建的应用程序,我不能依赖这些数据的现有消费者以任何方式保持理智(或不使用正则表达式等解析内容)所以真的想要行间距,理想情况下漂亮的打印缩进看起来就像以前的发电机。

任何想法如何更彻底地断言输出的漂亮打印?

标签: pythonxmllxmlpretty-print

解决方案


推荐阅读