Domanda

Ecco il mio codice di esempio:

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)

quando eseguo il codice sopra ottengo questo:

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

Vorrei ottenere:

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

Ho solo immaginato che ci fosse una proprietà innerText, non dà errori del compilatore, ma non sembra funzionare ...come faccio a creare un nodo di testo?

È stato utile?

Soluzione

L'impostazione di un attributo su un oggetto non genererà un errore in fase di compilazione o di esecuzione, semplicemente non farà nulla di utile se l'oggetto non vi accede (ad es."node.noSuchAttr = 'bar'" inoltre non darebbe un errore).

A meno che tu non abbia bisogno di una funzionalità specifica di minidom, guarderei 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)

Altri suggerimenti

@Daniele

Grazie per la risposta, ho anche capito come farlo con il minidom (non sono sicuro della differenza tra ElementTree e 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)

Giuro di averlo provato prima di postare la mia domanda...

Ho trovato un tutorial piuttosto dettagliato sul metodo minidom

Ecco un tutorial per il metodo etree.È molto più bello da leggere e sembra abbastanza semplice.Esamina anche l'analisi di xml (brevemente)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top