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

2 views
Skip to first unread message

Abhishek Kane

unread,
Sep 16, 2009, 11:33:48 AM9/16/09
to xml...@python.org
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

Stefan Behnel

unread,
Sep 16, 2009, 1:20:06 PM9/16/09
to Abhishek Kane, xml...@python.org

Could you explain a bit more about your intentions? What is the code doing?
I understand that the XML data is in a file that you parse, but where is
the data going afterwards? Do you use it in your program? Do you save it
back into a file?

Stefan
_______________________________________________
XML-SIG maillist - XML...@python.org
http://mail.python.org/mailman/listinfo/xml-sig

Josh English

unread,
Sep 16, 2009, 8:24:55 PM9/16/09
to pyXML
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 <abhish...@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...@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.

>> --
>> Josh English
>> Joshua.R...@gmail.com
>> http://joshenglish.livejournal.com
>
>
>
> --
> No defeat is final; until u stop fighting.
> - AGK
>
>

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

Abhishek Kane

unread,
Sep 17, 2009, 3:47:40 AM9/17/09
to Josh English, xml...@python.org
Reply all
Reply to author
Forward
0 new messages