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

Abhishek Kane abhishek.kane at gmail.com
Thu Sep 17 09:47:40 CEST 2009


*<?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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/xml-sig/attachments/20090917/a4b22337/attachment.htm>


More information about the XML-SIG mailing list