更改lxml中etree.tostring的默认缩进

时间:2009-08-06 13:47:37

标签: python lxml pretty-print

我有一个XML文档,我使用lxml.etree.tostring

进行打印
print etree.tostring(doc, pretty_print=True)

缩进的默认级别是2个空格,我想将其更改为4个空格。 tostring函数中没有任何论据;有没有办法用lxml轻松完成这个?

2 个答案:

答案 0 :(得分:5)

正如this thread中所述,没有真正的方法可以更改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

答案 1 :(得分:2)

从版本4.5开始,you can set indent size使用indent()函数。

etree.indent(root, space="    ")
print(etree.tostring(root))