2012-05-14 6 views
5

Tengo un objeto etree llamada projectxml:Cómo guardar un objeto etree xml? ahorro de carga lxml cuestión objetos eTree

projetxml type <type 'lxml.etree._Element'> 

tengo que guardarlo en el disco, por lo que lo convierten en árbol de elementos:

savedxml=et.ElementTree(projetxml) 
savedxml.write('/home/simon/Vysis.xml') 

Un otro script tenía para cargar el la Vysis.xml y otros dos archivos de la misma clase:

vysis=et.parse('/home/simon/Vysis.xml') 
asi=et.parse('/home/simon/ASI.xml') 
psi=et.parse('/home/simon/PSI.xml') 

Ahora asi, psi y LXML Vysis objetos son del tipo por ejemplo:

<lxml.etree._ElementTree object at 0xa7eaf8c> 

Mi problema es que no puedo más hacer:

R=et.Element('DataBase') 
R.append(asi) 
R.append(psi) 
R.append(vysis) 

a causa del error:

R.append(asi) 
    File "lxml.etree.pyx", line 697, in lxml.etree._Element.append (src/lxml /lxml.etree.c:35471) 
TypeError: Argument 'element' has incorrect type (expected lxml.etree._Element, got lxml.etree._ElementTree) 

supongo que tengo dos soluciones. El primero podría ser evitar convertir etree.Element a etree.ElementTree y guardarlo "directamente", pero no sé cómo. La segunda solución sería volver convertir etree.ElementTree a etree.Element type ... ¿Debería haber una solución limpia para guardar/cargar un objeto xml?

+0

tal vez esto es lo que busca ?: http://stackoverflow.com/questions/8274438/saving-an-lxml-etree-elementtree-object – cptPH

Respuesta

6

El parse function devuelve un ElementTree, no un Element. Si desea utilizar los resultados de parse como elementos, debe llamar al getroot.

vysis=et.parse('/home/simon/Vysis.xml').getroot() 
asi=et.parse('/home/simon/ASI.xml').getroot() 
psi=et.parse('/home/simon/PSI.xml').getroot() 

R=et.Element('DataBase') 
R.append(asi) 
R.append(psi) 
R.append(vysis) 
+0

Gracias, eso es todo !! –

Cuestiones relacionadas