2009-08-06 9 views
10

Ich habe ein XML-Dokument, das ich bin ziemlich-Druck lxml.etree.tostringÄndern der Standard-Einzug in lxml von etree.tostring

print etree.tostring(doc, pretty_print=True) 

Der Standard Einrückungsebene mit 2 Räumen, und ich möchte ändern dies zu 4 Räumen. Dafür gibt es kein Argument in der tostring Funktion; Gibt es eine Möglichkeit, dies einfach mit lxml zu tun?

Antwort

4

Wie in this thread gesagt, gibt es keine echte Möglichkeit, den Einzug der lxml.etree.tostring Pretty-Print zu ändern.

Aber können Sie:

  • hinzufügen eine XSLT-Transformation der Einzug
  • Leerzeichen hinzufügen, um den Baum zu ändern, mit wie etwas in der cElementTree Bibliothek

Code:

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