[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