Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the best way to change text contained in an XML file using Python?

Tags:

python

text

xml

Let's say I have an existing trivial XML file named 'MyData.xml' that contains the following:

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

I want to change the text value of 'foo' to 'bar' resulting in the following:

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

Once I am done, I want to save the changes.

What is the easiest and simplest way to accomplish all this?

like image 878
Ray Avatar asked Oct 07 '08 16:10

Ray


Video Answer


2 Answers

Use Python's minidom

Basically you will take the following steps:

  1. Read XML data into DOM object
  2. Use DOM methods to modify the document
  3. Save new DOM object to new XML document

The python spec should hold your hand rather nicely though this process.

like image 123
Ryan Avatar answered Oct 20 '22 01:10

Ryan


This is what I wrote based on @Ryan's answer:

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()

Not sure if this was the easiest and simplest approach but it does work. (@Javier's answer has less lines of code but requires non-standard library)

like image 42
Ray Avatar answered Oct 20 '22 01:10

Ray