13

我有一个 XML 文档,我正在使用它进行漂亮的打印lxml.etree.tostring

print etree.tostring(doc, pretty_print=True)

默认缩进级别是 2 个空格,我想将其更改为 4 个空格。函数中没有任何参数tostring;有没有办法用lxml轻松做到这一点?

4

2 回答 2

9

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

etree.indent(root, space="    ")
print(etree.tostring(root))
于 2020-09-01T10:27:35.860 回答
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
于 2009-08-06T14:20:28.767 回答