Изменение отступа по умолчанию для etree.tostring в lxml - PullRequest
11 голосов
/ 06 августа 2009

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

print etree.tostring(doc, pretty_print=True)

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

1 Ответ

5 голосов
/ 06 августа 2009

Как сказано в этой теме , нет реального способа изменить отступ lxml.etree.tostring pretty-print.

Но вы можете:

  • добавить 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
...