I like python because it’s minimalistic and elegant.
Let’s see how to update an XML node using ElementTree.
We use CD catalog in XML as a datasource.
<?xml version="1.0" encoding="iso-8859-1" ?>
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
<catalog>
<cd>
<title>empire burlesque</title>
<artist>bob dylan</artist>
<country>usa</country>
<company>columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
<cd>
<title>hide your heart</title>
<artist>bonnie tyler</artist>
<country>uk</country>
<company>cbs records</company>
<price>9.90</price>
<year>1988</year>
</cd>
<cd>
<title>greatest hits</title>
<artist>dolly parton</artist>
<country>usa</country>
<company>rca</company>
<price>9.90</price>
<year>1982</year>
</cd>
</catalog>
Here is the python script itself.
import xml.etree.ElementTree as ET
#parse XML file
tree = ET.parse('catalog_.xml')
#get root
root = tree.getroot()
#iterate over each price node (which is subchild of cd node)
for price in root.iter('price'):
#get the price of CD, multiply 10
new_price = float(price.text) * 10
#update the text (value) of the node
price.text = str(new_price)
#add 'updated' attribute to mark node updated=yes
price.set('updated', 'yes')
#can also use the same file if you want to directly update file.
tree.write('catalog_new.xml')
And the output is the following:
<catalog>
<cd>
<title>empire burlesque</title>
<artist>bob dylan</artist>
<country>usa</country>
<company>columbia</company>
<price updated="yes">109.0</price>
<year>1985</year>
</cd>
<cd>
<title>hide your heart</title>
<artist>bonnie tyler</artist>
<country>uk</country>
<company>cbs records</company>
<price updated="yes">99.0</price>
<year>1988</year>
</cd>
<cd>
<title>greatest hits</title>
<artist>dolly parton</artist>
<country>usa</country>
<company>rca</company>
<price updated="yes">99.0</price>
<year>1982</year>
</cd>
</catalog>