Question

Voici mon exemple de code :

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)

quand j'exécute le code ci-dessus, j'obtiens ceci :

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

Je voudrais obtenir:

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

J'ai juste deviné qu'il y avait une propriété innerText, elle ne donne aucune erreur du compilateur, mais ne semble pas fonctionner...comment puis-je créer un nœud de texte ?

Était-ce utile?

La solution

Définir un attribut sur un objet ne donnera pas d'erreur de compilation ou d'exécution, cela ne fera tout simplement rien d'utile si l'objet n'y accède pas (c'est-à-dire"node.noSuchAttr = 'bar'" ne donnerait pas non plus d'erreur).

Sauf si vous avez besoin d'une fonctionnalité spécifique de minidom, je regarderais 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)

Autres conseils

@Daniel

Merci pour la réponse, j'ai aussi compris comment le faire avec le minidom (je ne suis pas sûr de la différence entre ElementTree et le 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)

Je jure que j'ai essayé ça avant de poster ma question...

j'ai trouvé un tutoriel assez verbeux sur la méthode minidom

Voici un tutoriel pour la méthode etree.C'est beaucoup plus agréable à lire et semble assez simple.Il passe également en revue l'analyse du XML (brièvement)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top