replacing string in xml file

S

saif.shakeel

Hi,
I need to replace a string in xml file with something else.Ex

- <SERVICEPARAMETER id="_775" Semantics="subfunction" DDORef="_54">
<SHORTNAME>rate</SHORTNAME>
<LONGNAME>rate</LONGNAME>
<VALUE role="constant" DataType="unsigned" value="1" />
<BYTEPOSITION role="position" BytePos="1" />
</SERVICEPARAMETER>
- <SERVICEPARAMETER id="_776" Semantics="localId" DDORef="_54">

Here i have opened an xml
file(small part is pasted here).I want to replace the word 'localId'
with 'dataPackageID' wherever it comes in xml file.I tried this but
didnt work:

import sys

file_input = raw_input("Enter The ODX File Path:")
input_xml = open(file_input,'r')
input_xml.replace('localId','dataPackageId')
This gives error ---> AttributeError: 'file'
object has no attribute 'replace'
Can someone help me .
Thanks
 
S

Stefan Behnel

Hi,
I need to replace a string in xml file with something else.Ex

- <SERVICEPARAMETER id="_775" Semantics="subfunction" DDORef="_54">
<SHORTNAME>rate</SHORTNAME>
<LONGNAME>rate</LONGNAME>
<VALUE role="constant" DataType="unsigned" value="1" />
<BYTEPOSITION role="position" BytePos="1" />
</SERVICEPARAMETER>
- <SERVICEPARAMETER id="_776" Semantics="localId" DDORef="_54">

Here i have opened an xml
file(small part is pasted here).I want to replace the word 'localId'
with 'dataPackageID' wherever it comes in xml file.I tried this but
didnt work:

import sys

file_input = raw_input("Enter The ODX File Path:")
input_xml = open(file_input,'r')

This should say

input_xml = open(file_input,'r').read()
input_xml.replace('localId','dataPackageId')
This gives error ---> AttributeError: 'file'
object has no attribute 'replace'
Can someone help me .
Thanks

Stefan
 
C

Carsten Haese

This should say

input_xml = open(file_input,'r').read()

....and then it still won't work because the OP's replace call assumes in-place
operation despite the fact that strings aren't mutable.

The OP needs something following this pattern:

input_file = open(filename)
xmlcontents = input_file.read()
input_file.close()
xmlcontents = xmlcontents.replace("spam", "eggs")
output_file = open(filename,"w")
output_file.write(xmlcontents)
output_file.close()

For extra credit, use a different file name for writing out the result and
rename the file after it's written. That way you don't lose your file contents
if a meteor hits your CPU just after it started to overwrite the file.

Best regards,
 
S

saif.shakeel

(e-mail address removed) schrieb:










This should say

input_xml = open(file_input,'r').read()


Stefan- Hide quoted text -

- Show quoted text -

There is no error now,but the string is not being replaced,It remains
the same,should we save the opened file or something
 
S

saif.shakeel

There is no error now,but the string is not being replaced,It remains
the same,should we save the opened file or something- Hide quoted text -

- Show quoted text -

HI,
Thanks for the reply.that seems to work,but i was doing this
so as to attach it to a bigger code where it will be utilised before a
parsing.

#Input file and Output file path from user

file_input = raw_input("Enter The ODX File Path:")

(shortname,ext)=os.path.splitext(file_input)
f_open_out=shortname+".ini"
log=shortname+".xls"
test_file=shortname+"testxml.xml"

saveout = sys.stdout

input_xml = open(file_input,'r')
xmlcont=input_xml.read()
xmlcont=xmlcont.replace('localId','dataPackageId')
output_file = open(test_file,"w")
output_file.write(xmlcont)
output_file.close()

f_open=open(f_open_out, 'w')
logfile=open(log,"w")

sys.stdout = f_open

#Parse the input file,and check for correct ODX version

xmldoc = minidom.parse(input_xml)


I am opening 2 more files in addition to the file
where the new xml goes.One file is written using the sys.stdout
command as most of the output has to go there printing takes place in
many places (so cant use f_open.write) each time.
When i attach the part of replacing the string
'localid' in xml file with something else as given above with
xmlcont=xmlcont.replace('localId','dataPackageId')
the code does not run and hangs.Can more than 3 files be opened at a
time .I dotn know what the problem is here.
Thanks
 
S

saif.shakeel

HI,
Thanks for the reply.that seems to work,but i was doing this
so as to attach it to a bigger code where it will be utilised before a
parsing.

#Input file and Output file path from user

file_input = raw_input("Enter The ODX File Path:")

(shortname,ext)=os.path.splitext(file_input)
f_open_out=shortname+".ini"
log=shortname+".xls"
test_file=shortname+"testxml.xml"

saveout = sys.stdout

input_xml = open(file_input,'r')
xmlcont=input_xml.read()
xmlcont=xmlcont.replace('localId','dataPackageId')
output_file = open(test_file,"w")
output_file.write(xmlcont)
output_file.close()

f_open=open(f_open_out, 'w')
logfile=open(log,"w")

sys.stdout = f_open

#Parse the input file,and check for correct ODX version

xmldoc = minidom.parse(input_xml)

I am opening 2 more files in addition to the file
where the new xml goes.One file is written using the sys.stdout
command as most of the output has to go there printing takes place in
many places (so cant use f_open.write) each time.
When i attach the part of replacing the string
'localid' in xml file with something else as given above with
xmlcont=xmlcont.replace('localId','dataPackageId')
the code does not run and hangs.Can more than 3 files be opened at a
time .I dotn know what the problem is here.
Thanks- Hide quoted text -

- Show quoted text -

Hi,
Cna someone help me in this ,or throw some insight .
Thanks
 
G

Gabriel Genellina

What do you mean by "hangs"?
You have replaced stdout - what if the program is prompting the user for
something, and you can't see it? Can you type some text and continue?

Sure. The limit actually depends on the OS, but on "normal" circumstances
it's far above 3 files.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,768
Messages
2,569,575
Members
45,053
Latest member
billing-software

Latest Threads

Top