2012-05-14 2 views
5

Ho un oggetto eTree chiamato ProjectXML:Come salvare un oggetto xml etree? il risparmio di carico lxml problema oggetti eTree

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

ho bisogno di salvarlo su disco, in modo da convertirlo in albero elemento:

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

Un altro script aveva per caricare il la Vysis.xml e gli altri due file dello stesso tipo:

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

Ora asi, psi e Vysis lxml oggetti sono del tipo ad esempio:

<lxml.etree._ElementTree object at 0xa7eaf8c> 

mio problema è che non posso più fare:

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

a causa dell'errore:

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) 

Suppongo di avere due soluzioni. Il primo potrebbe essere evitare di convertire etree.Element in etree.ElementTree e di salvarlo "direttamente", ma non so come. La seconda soluzione sarebbe quella di riconvertire etree.ElementTree in etree.Element type ... Dovrebbe esserci una soluzione pulita per salvare/caricare un oggetto xml?

+0

forse questo è quello che state cercando ?: http://stackoverflow.com/questions/8274438/saving-an-lxml-etree-elementtree-object – cptPH

risposta

6

Il parse function restituisce un ElementTree, non un Element. Se si desidera utilizzare i risultati di parse come elementi, è necessario chiamare 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

Grazie, il gioco è fatto !! –