为什么LXML Write不能很好地打印到新文件?

时间:2019-01-31 06:24:07

标签: python xml lxml python-3.7

我想从一个文件中加载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>

1 个答案:

答案 0 :(得分:2)

编辑template.xml中的文本,如下所示:

<document></document>

再次运行您的代码,您将获得以下信息:

<document>
  <A>
    <a/>
  </A>
  <B>
    <b/>
  </B>
</document>

但是重要的问题是为什么?!

答案可以在formal documentation中找到,其中指出:

  

漂亮地打印(或格式化)XML文档意味着添加白色   内容的空间。这些修改仅对它们无害。   文档中不包含(文本)数据的影响元素。他们   如果它们影响包含数据的元素,则会破坏数据。 如果是lxml   无法区分空格和数据,也不会改变您的   数据。因此,仅在不存在空格的节点之间添加空格   包含数据。构造的树总是如此   逐个元素。