为什么LXML Write无法将内容漂亮地打印到新文件中?

3

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

你有没有看过这个帖子:lxml_why_u_no_format - undefined
1个回答

4

请将template.xml文件中的文本编辑为以下内容:

<document></document>

再次运行你的代码,你将得到如下结果:

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

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

答案可以在官方文档中找到(链接),文档指出:

美化(或格式化)XML文档意味着向内容添加空格。如果这些修改仅影响不包含(文本)数据的文档元素,则这些修改是无害的。如果这些修改影响包含数据的元素,则会破坏您的数据。如果lxml无法区分空格和数据,则不会更改您的数据。因此,在不包含数据的节点之间仅添加空格。对于逐个构建元素的树,这种情况始终存在。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接