ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> xml-sig
xml-sig
Re: [XML-SIG] Modify node attributes in XML file while parsing
by Abhishek Kane other posts by this author
Sep 17 2009 12:49AM messages near this date
Re: [XML-SIG] Modify node attributes in XML file while parsing | Re: [XML-SIG] Modify node attributes in XML file while parsing
& XSLT *<?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@[...].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@[...].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@[...].com
>  http://joshenglish.livejournal.com
> 



-- 
No defeat is final; until u stop fighting.
- AGK
Thread:
Abhishek Kane
Stefan Behnel
Abhishek Kane
Josh English

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved