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

Eli*_*ght 11 python lxml pretty-print

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

print etree.tostring(doc, pretty_print=True)
Run Code Online (Sandbox Code Playgroud)

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

小智 7

从 4.5 版开始,您可以使用indent()函数设置缩进大小

etree.indent(root, space="    ")
print(etree.tostring(root))
Run Code Online (Sandbox Code Playgroud)


Thi*_*hib 5

正如在这个帖子中所说,没有真正的方法来改变lxml.etree.tostring漂亮的印刷品的缩进.

但是你可以:

码:

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
Run Code Online (Sandbox Code Playgroud)

  • @smci:从 lxml 4.5(2020-01-29 发布)开始,有一个内置的 `indent()` 函数。请参阅@kuch 的答案。 (2认同)