我使用The ElementTree XML API构建XML,我希望能够漂亮地打印
我可以使用ET.write()
将我的XML写入文件,然后使用Pretty printing XML in Python中的许多建议对其进行漂亮打印。但是,这需要我序列化然后反序列化XML(到磁盘或StringIO)只是为了再次将它再次序列化 - 这显然不是最理想的。
那么,有没有办法漂亮地打印xml.etree.ElementTree
?
答案 0 :(得分:1)
正如the docs所述,在write
方法中:
file 是一个文件名,或者是为写入而打开的文件对象。
这包括StringIO
个对象。所以:
outfile = cStringIO.StringIO()
tree.write(of)
然后你可以使用你最喜欢的方法 - outfile
漂亮地打印outfile.seek(0)
,然后将outfile
本身传递给一个接收文件的函数,或者将outfile.getvalue()
传递给lxml.etree
一个带字符串的函数。
然而,请注意,在您链接的问题中打印XML的许多方法甚至都不需要这样。例如:
lxml.etree.tostring
(answer #2):ElementTree
是stdlib etree的近乎完美的超集,因此,如果您要将其用于漂亮打印,只需使用它来构建XML第一名。indent
/prettyprint
(answer #3):这需要一个BEGIN
INSERT INTO Przedmioty_Studentów
SELECT Id_Studenta, Id_Przedmiotu
FROM Obowiązkowe_Przedmioty_Studentów ops JOIN
inserted i
ON ops.Id_Studenta = i.Id_Studenta;
END;
树,这正是您已经拥有的树,而不是字符串或文件。答案 1 :(得分:0)
我在使用漂亮的打印纸时遇到问题。深入研究它,发现以下对我有用的解决方案。
import xml.etree.cElementTree as etree
from xml.dom import minidom
root = etree.Element("root")
animal = etree.SubElement(root, "animal")
etree.SubElement(animal, "pet").text = "dog"
xmlstr =
minidom.parseString(etree.toString(root)).toprettyxml(indent = " ")
print (xmlstr)
以XML格式返回结果