[XML-SIG] Modify node attributes in XML file while parsing

Josh English joshua.r.english at gmail.com
Thu Sep 17 02:24:55 CEST 2009


Everything works, but you need to write this over data.xml. I don't
remember how to do this in minidom. I think writing to an output file
is the only way to do this:

o = open('data.xml')
o.write(xmldoc.toxml())
o.close()

On Wed, Sep 16, 2009 at 9:58 AM, Abhishek Kane <abhishek.kane at gmail.com> wrote:
> <?xml version='1.0'?>
> <main_tag>
>
> <service name='abc' version='1'>
>     <instance name='default' value='false'/>
> </service>
> <service name='xyz' version='2'>
>     <instance name='default' value='false'/>
> </service>
>
> </main_tag>
>
>
>  is how the XML file looks like. I want to modify the value of instance
> based on the service name.
>
> So if i search for abc service & modify instance value like follows :
>
>
> import sys, logging, traceback
> from xml.dom import minidom
>
> data_file = "/tmp/data.xml"
>
> def main():
>     try:
>         xmldoc = minidom.parse(data_file)
>     except IOError:
>         print "err"
>         sys.exit(1)
>
>     start = xmldoc.firstChild
>
>     for element in xmldoc.getElementsByTagName("service"):
>         service = element.getAttribute("name")
>         print service
>         if service == "abc":
>             for instance in element.childNodes:
>                 if instance.nodeType == 1:
>                     print instance.getAttribute("value")
>                     instance.setAttribute("value", "true")
>                     print instance.getAttribute("value")
>
> if __name__ == "__main__":
>     logging.basicConfig(filename=log_file,level=logging.DEBUG)
>     main()
>
> The first print gives false & later one gives true. But the data.xml remains
> unchanged. How can I modify the node in data.xml?
>
> Thanks,
> Abhishek
>
> On Wed, Sep 16, 2009 at 9:47 PM, Josh English <joshua.r.english at gmail.com>
> wrote:
>>
>> If you are just searching for XML nodes, you are searching. If you are
>> interpreting them into something new, you are parsing.
>>
>> If you want to change an attribute, parse the XML file and make changes
>> there.
>>
>> Either that, or read the node attribute that you are given, make the
>> changes you need, but don't bother with writing a new XML file.
>>
>> Perhaps a sample of what you are trying to do would help up see the
>> solution.
>>
>> On 9/16/09, Abhishek Kane <abhishek.kane at gmail.com> wrote:
>> > Hi Guys,
>> >
>> > I got a bit idea about parsing XML file from online search. I need to
>> > modify
>> > node attributes in an XML file while I read it. I could read node
>> > attributes; but when I modify them using setAttribute, the local copy of
>> > that node gets changed.
>> > Is there any way to directly modify the node attributes in XML file or
>> > shall
>> > I just create another XML file where I will create nodes as I go through
>> > the
>> > nodes in old XML file?
>> >
>> > Thanks,
>> > Abhishek
>> >
>>
>>
>> --
>> Josh English
>> Joshua.R.English at gmail.com
>> http://joshenglish.livejournal.com
>
>
>
> --
> No defeat is final; until u stop fighting.
> - AGK
>
>



-- 
Josh English
Joshua.R.English at gmail.com
http://joshenglish.livejournal.com


More information about the XML-SIG mailing list