Hvordan oppretter jeg et XML-dokument i python

stemmer
17

Her er mitt eksempelkode:

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)

når jeg kjører koden ovenfor jeg får dette:

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

Jeg ønsker å få:

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

Jeg gjettet at det var en innertext eiendom, det gir ingen kompilator feil, men ser ikke ut til å fungere ... hvordan går jeg om å skape en tekst node?

Publisert på 27/08/2008 klokken 00:21
kilden bruker
På andre språk...                            


3 svar

stemmer
11

@Daniel

Takk for svar, jeg også funnet ut hvordan du gjør det med minidom (jeg er ikke sikker på forskjellen mellom ElementTree vs 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)

Jeg sverger jeg prøvd dette før du poster spørsmålet mitt ...

Svarte 27/08/2008 kl. 00:42
kilden bruker

stemmer
9

Sette et attributt på et objekt vil ikke gi en samle-tid eller en kjøretidsfeil, vil det bare gjøre noe nyttig hvis objektet ikke tilgang til det (dvs. " node.noSuchAttr = 'bar'" ville heller ikke gi en feil).

Med mindre du trenger en bestemt funksjon i minidom, vil jeg se på 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)
Svarte 27/08/2008 kl. 00:35
kilden bruker

stemmer
4

Jeg fant en ganske detaljert tutorial på minidom metode

Her er en tutorial for etree metoden . Det er mye hyggeligere å lese, og synes ganske enkelt. Det går også over parsing av XML (kort)

Svarte 27/08/2008 kl. 00:45
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more