2009-08-06 10 views
10

Mam dokumentu XML, który mam dość-drukarska stosująca lxml.etree.tostringZmiana domyślnego wcięcia etree.tostring w lxml

print etree.tostring(doc, pretty_print=True) 

Domyślny poziom wcięcia jest 2 miejsca, i chciałbym zmienić to do 4 spacji. Nie ma na to żadnego argumentu w funkcji tostring; Czy istnieje sposób na łatwe wykonanie tego przy pomocy lxml?

Odpowiedz

4

Jak wspomniano w artykule this thread, nie ma realnego sposobu na zmianę wcięcia z lxml.etree.tostring pretty-print.

Ale można:

  • dodać XSLT przekształcić zmienić tiret
  • dodać spacje do drzewa, coś jak w bibliotece cElementTree

Kod:

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 
Powiązane problemy