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?

¿Fue útil?

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)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top