2010-05-14 33 views
29

Estoy usando lxml para crear un archivo XML desde cero; tener un código como este:Escribir el archivo xml usando la biblioteca lxml en Python

from lxml import etree 

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

¿Cómo se escribe la raíz Element objeto a un archivo XML usando el método de write()ElementTree clase?

Respuesta

48

Puede obtener una cadena desde el elemento y luego escribir que a partir de lxml tutorial

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

o convertir a un árbol de elementos

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

Y 'write' también acepta el argumento' pretty_print = True' http://lxml.de/tutorial.html – juanmirocks

+2

cuando escribe 'str', asegúrese de escribir en modo binario' b': 'con open (' pretty.html ',' wb ') como archivo: file.write (str) ' – laviex

+0

A partir de python3, necesita usar' sys.stdout.buffer' en lugar de 'sys.stdout', que esencialmente es lo mismo que @laviex señaló, solo para el caso especial de 'sys.stdout'. – kdb

0

Puede probar el código de abajo.

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

Aquí es una respuesta sucinta

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)) 

sólo tiene que colocar el nodo en un árbol nuevo y escribe que a disco. También funciona para HtmlElements producido por búsquedas xpath.

Cuestiones relacionadas