我正在使用 LXML 编写一个 xml 文件,该文件是数据库的转储。 鉴于数据的大小,我必须反复编写 xml 文件。将 etree 转储到文件时,我在具有 32GB ram 的服务器上内存不足。
我已经编写了通过此页面上的方法迭代写入 xml 的代码https://lxml.de/api.html#incremental-xml-generation 参考此处在 python 中迭代写入 XML 节点。代码运行良好,我的服务器在前 5gb 内存内轻松生成 xml。
唯一的障碍是迭代写入不会保留我在转储 etree 时的缩进。我想要如下图所示的缩进。
我试过 etree.indent() 方法,但它只在客户端嵌套内缩进 4 个空格。我还在一些地方尝试了硬编码空间(比如 xml_file.write(" ")),但随后各个标签放错了位置。
如何强制“客户端”嵌套比现在缩进 4 个空格?
非常感谢您的帮助。
生成迭代 xml 的代码写入和不正确的缩进:
from lxml import etree
client = etree.Element("Client")
client.append(etree.Element("ClientID"))
client[0].text = "12345"
client.append(etree.Element("ClientProfile"))
client[1].append(etree.Element("User"))
client[1][0].append(etree.Element("FirstName"))
client[1][0][0].text = "John"
client[1][0].append(etree.Element("LastName"))
client[1][0][1].text = "Doe"
client[1][0].append(etree.Element("AccountName"))
client[1][0][2].text = "Acme Inc"
client[1][0].append(etree.Element("EmailAddress"))
client[1][0][3].text = "[email protected]"
client.append(etree.Element("SalesMetric"))
client[2].text = "12345"
filename = "test.xml"
with etree.xmlfile(filename, encoding="utf-8") as xml_file:
with xml_file.element("DbDump"):
xml_file.write("\n ")
version = etree.Element("ModelVersion")
version.text = "1.2.1"
xml_file.write(version, pretty_print=True)
etree.indent(client, space=" ")
for value in "12":
xml_file.write(client, pretty_print=True)