Making a small change to a large XML document

D

Dan Stromberg

Say I want to take an existing XML document, and change the value="9997"
and value="9998" to two different numbers, without changing any of the
rest of the document - not even changing comments or indentation, if
avoidable.

What's the best way of doing it in python?

<bean id="cs" class="c.d.q.s.C">
<property name="p" value="9997"/>
<property name="mP" value="9998"/>
<property name="g" value="cs"/>
<property name="e" value="t"/>
</bean>

My .xml file is full of such beans.

I've played around with minidom a little in the past, and I'm targetting
python 2.5.1.

Thanks!
 
S

Shriphani

Dan said:
Say I want to take an existing XML document, and change the value="9997"
and value="9998" to two different numbers, without changing any of the
rest of the document - not even changing comments or indentation, if
avoidable.

What's the best way of doing it in python?

<bean id="cs" class="c.d.q.s.C">
<property name="p" value="9997"/>
<property name="mP" value="9998"/>
<property name="g" value="cs"/>
<property name="e" value="t"/>
</bean>

My .xml file is full of such beans.

I've played around with minidom a little in the past, and I'm targetting
python 2.5.1.

Thanks!

Hello,
I hope this works:

#!/usr/bin/python

from BeautifulSoup import BeautifulStoneSoup
#If the XML you provided is in a file named 'problem'
xml_struc = open('problem','r')
soup = BeautifulStoneSoup(xml_struc)
list_of_tags = soup.findAll('property')
for tag in list_of_tags:
if tag['value'] == "9998":
tag['value'] = "9999" #or whatever number you like
soup_str = str(soup)
f = open('output', 'w')
f.write(soup_str)
f.close()
xml_struc.close()
 
G

Gerard Flanagan

Say I want to take an existing XML document, and change the value="9997"
and value="9998" to two different numbers, without changing any of the
rest of the document - not even changing comments or indentation, if
avoidable.

What's the best way of doing it in python?

<bean id="cs" class="c.d.q.s.C">
<property name="p" value="9997"/>
<property name="mP" value="9998"/>
<property name="g" value="cs"/>
<property name="e" value="t"/>
</bean>

My .xml file is full of such beans.

I've played around with minidom a little in the past, and I'm targetting
python 2.5.1.

Thanks!

With ElementTree (from xml.etree import ElementTree) and the 'replace'
and 'sub' functions here:

http://gflanagan.net/site/python/utils/elementfilter/elementfilter.py

(Some improvements to ElementTree:

http://effbot.org/zone/elementtree-13-intro.htm

)

Gerard
 
P

Paddy

Say I want to take an existing XML document, and change the value="9997"
and value="9998" to two different numbers, without changing any of the
rest of the document - not even changing comments or indentation, if
avoidable.

What's the best way of doing it in python?

<bean id="cs" class="c.d.q.s.C">
<property name="p" value="9997"/>
<property name="mP" value="9998"/>
<property name="g" value="cs"/>
<property name="e" value="t"/>
</bean>

My .xml file is full of such beans.

I've played around with minidom a little in the past, and I'm targetting
python 2.5.1.

Thanks!

If it was machine formatted, regular XML, on a unix box then I'd use
sed:

sed -e 's/value="9997"/value="zzz"/g;s/value="9998"/value="ZZZ"/g' \
infile > outfile

It would work for what you said, but if other modifications are
needed
then it is short enough to throw away if necessary and write a larger
script in Python.

- Paddy.
 

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

No members online now.

Forum statistics

Threads
473,756
Messages
2,569,535
Members
45,008
Latest member
obedient dusk

Latest Threads

Top