Définition d'une valeur pour un nœud dans un document XML en Python
-
05-07-2019 - |
Question
J'ai un document XML "abc.xml":
Je dois écrire une fonction replace (name, newvalue) qui peut remplacer le nœud de valeur par la balise 'name' par la nouvelle valeur et l'écrire sur le disque. Est-ce possible en python? Comment dois-je faire cela?
La solution
import xml.dom.minidom
filename='abc.xml'
doc = xml.dom.minidom.parse(filename)
print doc.toxml()
c = doc.getElementsByTagName("c")
print c[0].toxml()
c[0].childNodes[0].nodeValue = 'zip'
print doc.toxml()
def replace(tagname, newvalue):
'''doc is global, first occurrence of tagname gets it!'''
doc.getElementsByTagName(tagname)[0].childNodes[0].nodeValue = newvalue
replace('c', 'zit')
print doc.toxml()
Voir minidom amorce et Référence de l'API .
# cat abc.xml
<root>
<a>
<c>zap</c>
</a>
<b>
</b>
</root>
Autres conseils
Bien sûr que c'est possible. Le module xml.etree.ElementTree vous aidera à analyser XML, à rechercher des balises et à remplacer des valeurs.
Si vous en savez un peu plus sur le fichier XML que vous souhaitez modifier, vous pourrez probablement rendre la tâche un peu plus facile que si vous deviez écrire une fonction générique qui gérera n'importe quel fichier XML.
Si vous êtes déjà familiarisé avec l'analyse DOM, vous devez utiliser un package xml.dom à la place de celui ElementTree.