2010-05-14 11 views
29

Sto usando lxml per creare un file XML da zero; avere un codice come questo:Scrive il file xml usando la libreria lxml in Python

from lxml import etree 

root = etree.Element("root") 
root.set("interesting", "somewhat") 
child1 = etree.SubElement(root, "test") 

Come faccio a scrivere radice Element oggetto in un file XML utilizzando write() metodo ElementTree classe?

risposta

48

È possibile ottenere una stringa dall'elemento e poi scrivere che dal lxml tutorial

str = etree.tostring(root, pretty_print=True) 

o convertire a un albero elemento

et = etree.ElementTree(root) 
et.write(sys.stdout, pretty_print=True) 
+2

E 'write' accetta anche l'argomento' pretty_print = True' http://lxml.de/tutorial.html – juanmirocks

+2

quando scrivi 'str', assicurati di scrivere in modalità binaria' b': 'con open (' pretty.html ',' wb ') come file: file.write (str) ' – laviex

+0

A partire da python3, devi usare' sys.stdout.buffer' invece di 'sys.stdout' - che essenzialmente è lo stesso di cosa @laviex ha sottolineato, solo per il caso speciale di 'sys.stdout'. – kdb

0

È possibile provare il codice qui sotto.

from lxml import etree as ET 

root = ET.Element('Doc') 
level1 = ET.SubElement(root, 'S') 
main = ET.SubElement(level1, 'Text') 
main.text = 'Thanks for contributing an answer to Stack Overflow!' 
second = ET.SubElement(level1, 'Tokens') 
level2 = ET.SubElement(second, 'Token', word=u"low") 


level3 = ET.SubElement(level2, 'Morph') 
second1 = ET.SubElement(level3, 'Lemma') 
second1.text = 'sdfs' 
second1 = ET.SubElement(level3, 'info') 
second1.text = 'qw' 

level4 = ET.SubElement(level3, 'Aff') 
second1 = ET.SubElement(level4, 'Type') 
second1.text = 'sdfs' 
second1 = ET.SubElement(level4, 'Suf') 
second1.text = 'qw' 

tree = ET.ElementTree(root) 
tree.write('output.xml', pretty_print=True, xml_declaration=True, encoding="utf-8") 
0

Ecco una risposta succinta

from lxml import etree 

root = etree.Element("root") 
root.set("interesting", "somewhat") 
child1 = etree.SubElement(root, "test") 

my_tree = etree.ElementTree(root) 
with open('./filename', 'wb') as f: 
    f.write(etree.tostring(my_tree)) 

è sufficiente inserire il vostro nodo in un nuovo albero e scrivere che su disco. Funziona anche per HtmlElements prodotto dalle ricerche di xpath.

Problemi correlati