使用lxml的Python漂亮XML打印机

使用lxml的Python漂亮XML打印机,python,lxml,pretty-print,Python,Lxml,Pretty Print,在使用“丑陋”XML读取现有文件并进行一些修改后,漂亮的打印不起作用。我试过etree.write(文件名,pretty\u print=True) 我有以下XML: <testsuites tests="14" failures="0" disabled="0" errors="0" time="0.306" name="AllTests"> <testsuite name="AIR" tests="14" failures="0" disabled="0" erro

在使用“丑陋”XML读取现有文件并进行一些修改后,漂亮的打印不起作用。我试过
etree.write(文件名,pretty\u print=True)

我有以下XML:

<testsuites tests="14" failures="0" disabled="0" errors="0" time="0.306" name="AllTests">
    <testsuite name="AIR" tests="14" failures="0" disabled="0" errors="0" time="0.306">
....
好的,根据,在lxml etree模块中没有方法“write”。在将漂亮的打印xml字符串放入文件方面,您有两种选择。您可以像这样使用tostring方法:

f = open('doc.xml', 'w')
f.write(etree.tostring(root, pretty_print=True))
f.close()
或者,如果您的输入源不够完美,并且/或者您需要更多的旋钮和按钮来配置输出,那么您可以使用一个python包装器来实现tidy库

好的,根据,在lxml etree模块中没有方法“write”。在将漂亮的打印xml字符串放入文件方面,您有两种选择。您可以像这样使用tostring方法:

f = open('doc.xml', 'w')
f.write(etree.tostring(root, pretty_print=True))
f.close()
或者,如果您的输入源不够完美,并且/或者您需要更多的旋钮和按钮来配置输出,那么您可以使用一个python包装器来实现tidy库


对我来说,这个问题直到我注意到这里的一个小道消息才得以解决:

简短版本:

使用以下命令读取文件:

>>> parser = etree.XMLParser(remove_blank_text=True)
>>> tree = etree.parse(filename, parser)
这将“重置”已经存在的缩进,允许输出正确地生成自己的缩进。然后按正常方式打印:

>>> tree.write(<output_file_name>, pretty_print=True)
>tree.write(,pretty\u print=True)

对我来说,这个问题一直没有解决,直到我注意到这里的一个小道消息:

简短版本:

使用以下命令读取文件:

>>> parser = etree.XMLParser(remove_blank_text=True)
>>> tree = etree.parse(filename, parser)
这将“重置”已经存在的缩进,允许输出正确地生成自己的缩进。然后按正常方式打印:

>>> tree.write(<output_file_name>, pretty_print=True)
>tree.write(,pretty\u print=True)

我不知道为什么其他答案没有提到这一点。如果要获取
xml
的根,有一个名为
getroot()
的方法。我希望我回答了你的问题(虽然有点晚)


我不知道为什么其他答案没有提到这一点。如果要获取
xml
的根,有一个名为
getroot()
的方法。我希望我回答了你的问题(虽然有点晚)


下面是一个与Python 3配合使用的答案:

from lxml import etree
from sys import stdout
from io import BytesIO

parser = etree.XMLParser(remove_blank_text = True)
file_obj = BytesIO(text)
tree = etree.parse(file_obj, parser)
tree.write(stdout.buffer, pretty_print = True)

其中,
text
是以字节序列表示的xml代码。

这里有一个答案,该答案适用于Python 3:

from lxml import etree
from sys import stdout
from io import BytesIO

parser = etree.XMLParser(remove_blank_text = True)
file_obj = BytesIO(text)
tree = etree.parse(file_obj, parser)
tree.write(stdout.buffer, pretty_print = True)

其中
text
是作为字节序列的xml代码。

什么是e.tree?什么是e.tree?这是因为write方法在_ElementTree类上,这里:这是因为write方法在_ElementTree类上,这里:
from lxml import etree
from sys import stdout
from io import BytesIO

parser = etree.XMLParser(remove_blank_text = True)
file_obj = BytesIO(text)
tree = etree.parse(file_obj, parser)
tree.write(stdout.buffer, pretty_print = True)