Come posso creare un documento XML in Python
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?
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)