Quel est le meilleur moyen de changer le texte contenu dans un fichier XML en utilisant Python?

StackOverflow https://stackoverflow.com/questions/179287

  •  05-07-2019
  •  | 
  •  

Question

Supposons que j'ai un fichier XML trivial existant nommé 'MyData.xml' contenant les éléments suivants:

<?xml version="1.0" encoding="utf-8" ?>
<myElement>foo</myElement>

Je souhaite modifier la valeur textuelle de "foo" en "bar", ce qui entraîne:

<?xml version="1.0" encoding="utf-8" ?>
<myElement>bar</myElement>

Une fois que j'ai terminé, je veux enregistrer les modifications.

Quel est le moyen le plus simple et le plus simple de réaliser tout cela?

Était-ce utile?

La solution

Utilisez le minidom de Python

.

En principe, vous allez suivre les étapes suivantes:

  1. Lire des données XML dans un objet DOM
  2. Utilisez les méthodes DOM pour modifier le document
  3. Enregistrer un nouvel objet DOM dans un nouveau document XML

La spécification Python devrait vous tenir la main plutôt bien malgré ce processus.

Autres conseils

C’est ce que j’ai écrit sur la base de La réponse de Ryan :

from xml.dom.minidom import parse
import os

# create a backup of original file
new_file_name = 'MyData.xml'
old_file_name = new_file_name + "~"
os.rename(new_file_name, old_file_name)

# change text value of element
doc = parse(old_file_name)
node = doc.getElementsByTagName('myElement')
node[0].firstChild.nodeValue = 'bar'

# persist changes to new file
xml_file = open(new_file_name, "w")
doc.writexml(xml_file, encoding="utf-8")
xml_file.close()

Je ne suis pas sûr que ce soit l’approche la plus simple et la plus simple, mais cela fonctionne. ( La réponse de @ Javier a moins de lignes de code mais nécessite une bibliothèque non standard)

Pour des manipulations XML rapides et non critiques, j'aime beaucoup les P4X . Cela vous permet d'écrire comme ceci:

import p4x
doc = p4x.P4X (open(file).read)
doc.myElement = 'bar'

Vous pouvez également consulter l'excellente bibliothèque de liaisons de données XML d'Uche Ogbuji, Amara: http://uche.ogbuji.net/tech/4suite/amara

(Documentation ici: http://platea.pntic.mec.es/~jmorilla/amara/manual / )

La chose intéressante à propos d’Amara est qu’il transforme un document XML en objet Python. Vous pouvez donc effectuer des opérations telles que:

record = doc.xml_create_element(u'Record')

nameElem = doc.xml_create_element(u'Name', content=unicode(name))

record.xml_append(nameElem)

valueElem = doc.xml_create_element(u'Value', content=unicode(value))

record.xml_append(valueElem

(qui crée un élément Record contenant les éléments Name et Value (qui contiennent à leur tour les valeurs des variables name et value)).

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