toprettyxml()

Lorenzo Gil Sanchez lgs en sicem.biz
Jue Jun 24 11:30:44 CEST 2004


Creo que no me he explicado del todo bien. Veamos otro ejemplo:

>>> import xml.dom.minidom
>>> doc = xml.dom.getDOMImplementation().createDocument(None, None,
None)
>>> e1 = doc.createElement('raiz')
>>> doc.appendChild(e1)
<DOM Element: raiz at 0x402af68c>
>>> e2 = doc.createElement('nombre')
>>> e1.appendChild(e2)
<DOM Element: nombre at 0x402bb52c>
>>> e3 = doc.createTextNode('Pepito')
>>> e2.appendChild(e3)
<DOM Text node "Pepito">
>>> e4 = doc.createElement('apellidos')
>>> e1.appendChild(e4)
<DOM Element: apellidos at 0x402abbcc>
>>> e5 = doc.createTextNode('Perez')
>>> e4.appendChild(e5)
<DOM Text node "Perez">
>>> print doc.toxml()
<?xml version="1.0" ?>
<raiz><nombre>Pepito</nombre><apellidos>Perez</apellidos></raiz>
>>> print doc.toprettyxml()
<?xml version="1.0" ?>
<raiz>
        <nombre>
                Pepito
        </nombre>
        <apellidos>
                Perez
        </apellidos>
</raiz>
 
>>>

En este ejemplo, creo el arbol DOM programaticamente, pero en realidad
da igual. Cuando hacemos doc.toxml() efectivamente la cadena qeu genera
es correcta, pero muy poco legible (pensad en documentos de tamanio
medio). Si usamos el doc.toprettyxml() es mas legible pero no vale
porque ese xml no es igual al que yo he generado.

Vamos que la cuestion es de que me sirve usar xml si el fichero se va a
quedar tan legible como un fichero binario (exagerando claro). Como dije
en el primer correo todo se reduce a que el toprettyxml() sea capaz de
distinguir los nodos de texto de los demas.

Ahora viene lo mejor:

>>> data = """
... <raiz>
...     <nombre>Pepito</nombre>
...     <apellido>Perez</apellido>
... </raiz>
... """
>>> doc = xml.dom.minidom.parseString(data)
>>> print doc.toxml()
<?xml version="1.0" ?>
<raiz>
        <nombre>Pepito</nombre>
        <apellido>Perez</apellido>
</raiz>


En esta ocasion, el toxml() ha hecho justo lo que yo queria!!, sin
embargo si ese mismo documento se genera programaticamente el resultado
del toxml() es diferente. Poco consistente cuando el arbol DOM es el
mismo, no?

Espero que ahora se entienda mejor.


El jue, 24-06-2004 a las 02:29, luis miguel morillas escribió:
> 	Asunto: [Python-es] toprettyxml()
> 	Fecha: mié, jun 23, 2004 at 03:33:46 +0200
> 
> 
> Citando a  Lorenzo Gil Sanchez (lgs en sicem.biz):
> > Hola,
> > 
> > queria preguntaros si alguno de vosotros ha tenido el siguiente
> > problema:
> >
> Yo no entiendo el problema. Si lo que quieres es mostrar el doc tal como
> lo tienes, usa 
> 
> >>> print document.toxml()
> 
> Si lo que quieres es verlo bonito (alineado y con saltos entre etiquetas y texto),
> usa 
> >>> print document.toprettyxml()
> 
> > Python 2.3.3 (#1, May  7 2004, 10:31:40)
> > [GCC 3.3.3 20040412 (Red Hat Linux 3.3.3-7)] on linux2
> > Type "help", "copyright", "credits" or "license" for more information.
> > >>> data = """
> > ... <nodo>valores</nodo>
> > ... """
> > >>> import xml.dom.minidom
> > >>> document = xml.dom.minidom.parseString(data)
> > >>> print document.toprettyxml()
> > <?xml version="1.0" ?>
> > <nodo>
> >         valores
> > </nodo>
> > 
> > 
> > Como veis, lo que esta devolviendo document.toprettyxml() es diferente a
> > lo que valia data en el sentido que el nodo XML de texto ('valores')
> > contiene mas texto (tabuladores y un \n) del que yo he especificado.
> > 
> > Esto quiere decir que la herramienta que va a parsear este XML debe
> > tener esto en cuenta, y si como en mi caso, no se controla esa
> > herramienta tenemos un problema.
> > 
> > Mas de uno me dira que pruebe lo siguiente:
> > 
> > >>> print document.toprettyxml(indent='', newl='')
> > <?xml version="1.0" ?>
> > <nodo>valores</nodo>
> > 
> > Pero esto no vale, porque estamos perdiendo la poca inteligibilidad que
> > tiene un documento XML. En este ejemplo parece muy bonito pero cuando
> > tenemos un arbol DOM bastante profundo, el hecho de no meter retornos de
> > carro o tabuladores nos genera un trozo de texto muy grande (un chorizon
> > solia decir mi profe de matematicas).
> > 
> > Resumiento, el problema es que el toprettyxml() no distingue entre nodos
> > de texto y nodos normales. Alguien sabe como solucionarlo?
> > 
> > gracias y un saludo
> > 
> > Lorenzo
> > 
> 
> > _______________________________________________
> > Python-es mailing list
> > Python-es en aditel.org
> > http://listas.aditel.org/listinfo/python-es
> 




Más información sobre la lista de distribución Python-es