Frage

Hier ist mein Beispielcode:

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)

Wenn ich den obigen Code ausführe, erhalte ich Folgendes:

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

Ich hätte gern:

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

Ich habe nur vermutet, dass es eine innerText-Eigenschaft gibt. Sie gibt keinen Compilerfehler aus, scheint aber nicht zu funktionieren ...Wie erstelle ich einen Textknoten?

War es hilfreich?

Lösung

Das Festlegen eines Attributs für ein Objekt führt nicht zu einem Kompilierungs- oder Laufzeitfehler, sondern führt nur zu nichts Nützlichem, wenn das Objekt nicht darauf zugreift (d. h."node.noSuchAttr = 'bar'" würde auch keinen Fehler geben).

Es sei denn, Sie benötigen eine bestimmte Funktion von minidom, würde ich mir ansehen 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)

Andere Tipps

@Daniel

Vielen Dank für die Antwort. Ich habe auch herausgefunden, wie man das mit dem Minidom macht (ich bin mir nicht sicher, was der Unterschied zwischen ElementTree und Minidom ist).


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)

Ich schwöre, ich habe das versucht, bevor ich meine Frage gestellt habe ...

Ich habe einen ... gefunden Ziemlich ausführliches Tutorial zur Minidom-Methode

Hier ist ein Tutorial für die Etree-Methode.Es ist viel angenehmer zu lesen und scheint recht einfach zu sein.Es geht auch (kurz) um das Parsen von XML.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top