Изменение отступа по умолчанию для etree.tostring в lxml

У меня есть документ XML, который я печатаю с помощью lxml.etree.tostring

print etree.tostring(doc, pretty_print=True)

Уровень отступов по умолчанию - 2 пробела, и я хотел бы изменить это на 4 пробела. Для функции tostring нет никаких аргументов; есть ли способ сделать это легко с помощью lxml?

Ответ 1

Как сказано в этот поток, нет реального способа изменить отступ в 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