在使用“丑陋的”XML读取现有文件并做了一些修改后,漂亮的打印不起作用。我试过etree.write(FILE_NAME, pretty_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">
....
我这样使用它:
tree = etree.parse('original.xml')
root = tree.getroot()
...
# modifications
...
with open(FILE_NAME, "w") as f:
tree.write(f, pretty_print=True)
发布于 2012-03-08 11:24:02
对我来说,这个问题直到我注意到这里的小花边新闻时才得到解决:
http://lxml.de/FAQ.html#why-doesn-t-the-pretty-print-option-reformat-my-xml-output
简短版本:
使用以下命令读入文件:
>>> parser = etree.XMLParser(remove_blank_text=True)
>>> tree = etree.parse(filename, parser)
这将“重置”已经存在的缩进,允许输出正确地生成自己的缩进。然后像往常一样使用pretty_print:
>>> tree.write(<output_file_name>, pretty_print=True)
发布于 2011-02-23 13:54:42
根据API docs的说法,lxml etree模块中没有"write“方法。对于将打印得很好的xml字符串放到文件中,您有几个选择。您可以像这样使用tostring方法:
f = open('doc.xml', 'w')
f.write(etree.tostring(root, pretty_print=True))
f.close()
或者,如果您的输入源不够完美,并且/或者您想要更多的旋钮和按钮来配置您的输出,您可以使用python包装器来创建整洁的库。
import tidy
f.write(tidy.parseString(your_xml_str, **{'output_xml':1, 'indent':1, 'input_xml':1}))
http://countergram.com/open-source/pytidylib
from tidylib import tidy_document
document, errors = tidy_document(your_xml_str, options={'output_xml':1, 'indent':1, 'input_xml':1})
f.write(document)
发布于 2011-02-23 12:19:54
fp = file('out.txt', 'w')
print(e.tree.tostring(...), file=fp)
fp.close()
https://stackoverflow.com/questions/5086922
复制相似问题