【问题标题】:Why is LXML Write not pretty printing to a new file?为什么 LXML Write 不能很好地打印到新文件?
【发布时间】:2019-01-31 06:24:07
【问题描述】:

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

模板.xml

<document>
</document>

output.xml 是在没有格式化的情况下编写的

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

【问题讨论】:

标签: python xml lxml python-3.7


【解决方案1】:

编辑template.xml里面的文字如下:

<document></document>

再次运行你的代码,你会得到这个:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2021-09-22
    • 1970-01-01
    • 2020-04-08
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多