更改lxml中etree.tostring的默认缩进
我有一个XML文档,我正在用 lxml.etree.tostring
来格式化它,让它看起来更整齐。
print etree.tostring(doc, pretty_print=True)
默认的缩进是2个空格,但我想把它改成4个空格。可是 tostring
函数里没有这个参数,我想知道有没有简单的方法可以用lxml来实现这个?
4 个回答
1
这件事可以很简单地完成,只需要用到XMLParser和indent。其实不需要使用pretty_print这个功能:
parser = etree.XMLParser(remove_blank_text=True)
tree = etree.parse('myfile.xml',parser)
etree.indent(tree, space=" ")
tree.write('myfile.xml', encoding='UTF-8')
14
从4.5版本开始,你可以通过使用 indent()
函数来设置缩进的大小。
etree.indent(root, space=" ")
print(etree.tostring(root))
5
正如在这个讨论帖中提到的,实际上没有办法直接改变lxml.etree.tostring
的缩进格式。
不过,你可以尝试以下方法:
- 添加一个XSLT转换来改变缩进
- 使用像cElementTree库那样的方法,给树结构添加空白
代码:
def indent(elem, level=0):
i = "\n" + level*" "
if len(elem):
if not elem.text or not elem.text.strip():
elem.text = i + " "
if not elem.tail or not elem.tail.strip():
elem.tail = i
for elem in elem:
indent(elem, level+1)
if not elem.tail or not elem.tail.strip():
elem.tail = i
else:
if level and (not elem.tail or not elem.tail.strip()):
elem.tail = i