13

使用してきれいに印刷しているXMLドキュメントがありますlxml.etree.tostring

print etree.tostring(doc, pretty_print=True)

デフォルトのインデント レベルはスペース 2 つですが、これをスペース 4 つに変更したいと考えています。tostring関数にはこれに対する引数はありません。lxmlでこれを簡単に行う方法はありますか?

4

2 に答える 2

5

このスレッドで述べたように、 lxml.etree.tostringpretty-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
于 2009-08-06T14:20:28.767 に答える