[Tutor] Writing to XML file with minidom

Kent Johnson kent37 at tds.net
Tue Aug 30 13:40:02 CEST 2005


Johan Geldenhuys wrote:
> Thanks for he help, so far.
> 
> I am still having some questions on writing my new string back to the 
> xml file after I found what I was looking for and changed it.
> 
> Extracts:
> 
> xmlDocument = minidom.parse(file_name) # open existing file for parsing
> main = xmlDocument.getElementsByTagName('Config')
> main.getElementsByTagName('Connection')
> configSection = mainSection[0]
> 
> for node in configSection: #Here I get the NamedNodeMap info
>         password = node.getAttribute("password")
>         # Do stuff to the password and I have 'newPass'
>        node.removeAttribute('password') # I take out my old attribute 
> and it's value
>        node.setAttribute('password', newPass)
> 
> 
> At this stage I have my new attribute and it's new value, but how do I 
> write that to my file in the same place?
> I have to get a 'writer', how do I do this?

The minidom docs say that DOM objects have a writexml() method:
writexml(writer[,indent=""[,addindent=""[,newl=""]]])
    Write XML to the writer object. The writer should have a write() method which matches that of the file object interface.

This is saying that 'writer' should act like a file object. So it can just be a file object obtained by calling open(). In other words something like
f = open(file_name, 'w')
xmlDocument.writexml(f)
f.close()

should do it. If you have non-ascii characters in your XML you should use codecs.open() instead of plain open() and encode your XML as desired (probably utf-8).

> Do I have to write all the data back or can I just replace the pieces I 
> changed?

You have to write it all back.

Kent



More information about the Tutor mailing list