我想从一个文件中加载XML模板,对其进行修改,然后将结果保存为具有格式的新文件。但是,漂亮的打印没有添加所需的格式。堆栈上的其他解决方案用于将树写回到同一文件而不是新文件时。例如:
from lxml import etree as ET
parser = ET.XMLParser(remove_blank_text=True)
tree = ET.parse("template.xml", parser)
root = tree.getroot()
A = ET.SubElement(root, "A")
ET.SubElement(A, "a")
B = ET.SubElement(root, "B")
ET.SubElement(B, "b")
tree.write("output.xml", pretty_print=True)
template.xml
<document>
</document>
output.xml编写时未格式化
<document>
<A><a/></A><B><b/></B></document>
答案 0 :(得分:2)
编辑template.xml
中的文本,如下所示:
<document></document>
再次运行您的代码,您将获得以下信息:
<document>
<A>
<a/>
</A>
<B>
<b/>
</B>
</document>
但是重要的问题是为什么?!
答案可以在formal documentation中找到,其中指出:
漂亮地打印(或格式化)XML文档意味着添加白色 内容的空间。这些修改仅对它们无害。 文档中不包含(文本)数据的影响元素。他们 如果它们影响包含数据的元素,则会破坏数据。 如果是lxml 无法区分空格和数据,也不会改变您的 数据。因此,仅在不存在空格的节点之间添加空格 包含数据。构造的树总是如此 逐个元素。