How To Replace Node Values In Xml With Python
I am new to Python. Now I have to replace a number of values in an XML file with Python. The example snippet of XML is:
Solution 1:
I couldn't get lxml to process your xml without adding fake namespace declarations at the top so here is how your input looked
<gmd:extentxmlns:gmd="urn:x:y:z:1"xmlns:gco="urn:x:y:z:1"><gmd:EX_Extent><gmd:descriptiongco:nilReason="missing"><gco:CharacterString /></gmd:description><gmd:geographicElement><gmd:EX_GeographicBoundingBox><gmd:westBoundLongitude><gco:Decimal>112.907</gco:Decimal></gmd:westBoundLongitude><gmd:eastBoundLongitude><gco:Decimal>158.96</gco:Decimal></gmd:eastBoundLongitude><gmd:southBoundLatitude><gco:Decimal>-54.7539</gco:Decimal></gmd:southBoundLatitude><gmd:northBoundLatitude><gco:Decimal>-10.1357</gco:Decimal></gmd:northBoundLatitude></gmd:EX_GeographicBoundingBox></gmd:geographicElement></gmd:EX_Extent></gmd:extent>
I assumed you have two lists one for the current values and one for the new ones like this
old = [112.907, 158.96, -54.7539, -10.1357] new = [1,2,3,4] d = dict(zip(old,new))
Here is the full code
#!/usr/bin/env python
import sys
from lxml import etree
def process(fname):
f = open(fname)
tree = etree.parse(f)
root = tree.getroot()
old = [112.907, 158.96, -54.7539, -10.1357]
new = [1,2,3,4]
d = dict(zip(old,new))
nodes = root.findall('.//gco:Decimal', root.nsmap)
for node in nodes:
node.text = str(d[float(node.text)])
f.close()
return etree.tostring(root, pretty_print=True)
def main():
fname = sys.argv[1]
text = process(fname)
outfile = open('out.xml', 'w+')
outfile.write(text)
outfile.close()
if __name__ == '__main__':
main()
and here is how the output looked like
<gmd:extentxmlns:gmd="urn:x:y:z:1"xmlns:gco="urn:x:y:z:1"><gmd:EX_Extent><gmd:descriptiongco:nilReason="missing"><gco:CharacterString/></gmd:description><gmd:geographicElement><gmd:EX_GeographicBoundingBox><gmd:westBoundLongitude><gco:Decimal>1</gco:Decimal></gmd:westBoundLongitude><gmd:eastBoundLongitude><gco:Decimal>2</gco:Decimal></gmd:eastBoundLongitude><gmd:southBoundLatitude><gco:Decimal>3</gco:Decimal></gmd:southBoundLatitude><gmd:northBoundLatitude><gco:Decimal>4</gco:Decimal></gmd:northBoundLatitude></gmd:EX_GeographicBoundingBox></gmd:geographicElement></gmd:EX_Extent></gmd:extent>
Post a Comment for "How To Replace Node Values In Xml With Python"