¿Cómo creo un documento xml en Python?
Pregunta
Aquí está mi código de muestra:
from xml.dom.minidom import *
def make_xml():
doc = Document()
node = doc.createElement('foo')
node.innerText = 'bar'
doc.appendChild(node)
return doc
if __name__ == '__main__':
make_xml().writexml(sys.stdout)
cuando ejecuto el código anterior me sale esto:
<?xml version="1.0" ?>
<foo/>
Me gustaría conseguir:
<?xml version="1.0" ?>
<foo>bar</foo>
Simplemente supuse que había una propiedad InnerText, no da ningún error de compilación, pero no parece funcionar...¿Cómo hago para crear un nodo de texto?
Solución
Establecer un atributo en un objeto no generará un error en tiempo de compilación o de ejecución, simplemente no hará nada útil si el objeto no accede a él (es decir,"node.noSuchAttr = 'bar'
"tampoco daría un error).
A menos que necesite una característica específica de minidom
, yo miraría ElementTree
:
import sys
from xml.etree.cElementTree import Element, ElementTree
def make_xml():
node = Element('foo')
node.text = 'bar'
doc = ElementTree(node)
return doc
if __name__ == '__main__':
make_xml().write(sys.stdout)
Otros consejos
@Daniel
Gracias por la respuesta, también descubrí cómo hacerlo con el minidom (no estoy seguro de la diferencia entre ElementTree y minidom)
from xml.dom.minidom import *
def make_xml():
doc = Document();
node = doc.createElement('foo')
node.appendChild(doc.createTextNode('bar'))
doc.appendChild(node)
return doc
if __name__ == '__main__':
make_xml().writexml(sys.stdout)
Juro que probé esto antes de publicar mi pregunta...
Encontre un tutorial bastante detallado sobre el método minidom
Aquí está un tutorial para el método etree.Es mucho más agradable de leer y parece bastante sencillo.También repasa el análisis de xml (brevemente)