Pergunta

Aqui é o meu código de exemplo:

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)

ao executar o código acima eu posso conseguir isso:

<?xml version="1.0" ?>
<foo/>

Eu gostaria de obter:

<?xml version="1.0" ?>
<foo>bar</foo>

Eu só podia imaginar que houve uma propriedade innerText, ele não dá nenhum erro de compilador, mas não parece funcionar...como faço para ir sobre a criação de um nó de texto?

Foi útil?

Solução

A definição de um atributo em um objeto não dar tempo de compilação ou um erro de tempo de execução, o que não vai fazer nada de útil se o objeto não acessa-lo (por exemplo,"node.noSuchAttr = 'bar'"também não dar erro).

A menos que você precise de uma funcionalidade específica do minidom, Eu ia olhar 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)

Outras dicas

@Daniel

Obrigado pela resposta, eu também descobri como fazê-lo com a minidom (não tenho certeza da diferença entre o ElementTree vs o 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)

Eu juro que eu tentei isso antes de postar minha pergunta...

Eu encontrei um muito detalhado tutorial sobre o método minidom

Aqui está um tutorial para o etree método.É muito mais agradável de ler, e parece bastante simples.Ele também vai análise (parsing) de xml (brevemente)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top