使用lxml的Python漂亮XML打印机
在使用“丑陋”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
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)