一尘不染

如何获得Python的ElementTree精美打印到XML文件?

python

背景

我正在使用SQLite访问数据库并检索所需的信息。我正在Python 2.6版中使用ElementTree来创建具有该信息的XML文件。

import sqlite3
import xml.etree.ElementTree as ET

# NOTE: Omitted code where I acccess the database,
# pull data, and add elements to the tree

tree = ET.ElementTree(root)

# Pretty printing to Python shell for testing purposes
from xml.dom import minidom
print minidom.parseString(ET.tostring(root)).toprettyxml(indent = "   ")

#######  Here lies my problem  #######
tree.write("New_Database.xml")

尝试次数

我已经尝试使用tree.write("New_Database.xml", "utf-8")它代替上面的最后一行代码,但是它根本没有编辑XML的布局-
仍然是一团糟。

我还决定摆弄一下,然后尝试做:而不是将其打印到Python shell上,这会产生错误
AttributeError:’unicode’对象没有属性’write’*
tree = minidom.parseString(ET.tostring(root)).toprettyxml(indent = " ")
*

问题

当我在最后一行将树写入XML文件时,是否有办法像在Python Shell上一样漂亮地打印到XML文件?

我可以toprettyxml()在这里使用还是有其他方法来做到这一点?


阅读 144

收藏
2020-12-20

共1个答案

一尘不染

无论您的XML字符串是什么,您都可以通过打开一个用于将字符串写入文件的文件将其写入您选择的文件中。

from xml.dom import minidom

xmlstr = minidom.parseString(ET.tostring(root)).toprettyxml(indent="   ")
with open("New_Database.xml", "w") as f:
    f.write(xmlstr)

有一种可能的复杂性,尤其是在Python
2中,它对字符串中的Unicode字符的要求不那么严格,也不太复杂。如果您的toprettyxml方法退回Unicode字符串(u"something"),则可能需要将其转换为合适的文件编码,例如UTF-8。例如,将一个写行替换为:

f.write(xmlstr.encode('utf-8'))
2020-12-20