open - ¿Cómo creo un documento xml en python?
xml python 3 (3)
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, obtengo esto:
<?xml version="1.0" ?>
<foo/>
Me gustaría conseguir:
<?xml version="1.0" ?>
<foo>bar</foo>
Adiviné que había una propiedad innerText, no da error de compilación, pero parece que no funciona ... ¿cómo hago para crear un nodo de texto?
@Daniel
Gracias por la respuesta, también descubrí cómo hacerlo con el minidom (no estoy seguro de la diferencia entre el ElementTree vs el 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 ...
Encontré un tutorial bastante detallado sobre el método minidom
Aquí hay un tutorial para el método etree . Es mucho más agradable de leer, y parece bastante simple. También repasa el análisis de xml (brevemente)
Establecer un atributo en un objeto no dará un error de tiempo de compilación o de tiempo 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
, 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)