2009-08-06 6 views
10

tengo un documento XML, que estoy bastante-imprimir utilizando lxml.etree.tostringCambio de la indentación por defecto de etree.tostring en lxml

print etree.tostring(doc, pretty_print=True) 

El nivel predeterminado de la muesca es de 2 espacios, y me gustaría cambiar esto a 4 espacios. No hay ningún argumento para esto en la función tostring; ¿Hay alguna manera de hacer esto fácilmente con lxml?

Respuesta

4

Como se dijo en this thread, no hay una forma real de cambiar la sangría de lxml.etree.tostring bonita-impresión.

embargo, puede:

  • agregar una transformación XSLT para cambiar el guión
  • añadir espacios en blanco al árbol, con algo así como en la biblioteca cElementTree

código:

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 
Cuestiones relacionadas