Skip to content Skip to sidebar Skip to footer

Take 2 Xml Elements And Merge Into 1 New Element - Python

I am currently working on a project using OpenStreetMap XML documents. Part of the project is to verify some of the data and it's consistency. I am fairly new with Python and with

Solution 1:

Using ElementTree.

XML = """<root><wayid="11005330"version="2"timestamp="2013-02-05T20:56:45Z"changeset="14926577"uid="451693"user="bot-mode"><ndref="98006629"/><ndref="98006630"/><ndref="98006631"/><tagk="highway"v="residential"/><tagk="name"v="Kiwi Court"/><tagk="tiger:cfcc"v="A41"/><tagk="tiger:county"v="Lake, FL"/><tagk="tiger:name_base"v="Kiwi"/><tagk="tiger:name_type"v="Ct"/><tagk="tiger:reviewed"v="no"/><tagk="tiger:zip_left"v="34714"/><tagk="tiger:zip_right"v="34714"/></way></root>"""

Demo:

import xml.etree.ElementTree as ET

tree = ET.parse(filename)
doc = tree.getroot()
for way in doc.findall(".//way"):            #Find all way tags
    name_base = way.find('.//tag[@k="tiger:name_base"]').get("v")     #Get tiger:name_base attr
    way.remove(way.find('.//tag[@k="tiger:name_base"]'))              #Remove Tag
    name_type = way.find('.//tag[@k="tiger:name_type"]').get("v")     #Get tiger:name_type attr
    way.remove(way.find('.//tag[@k="tiger:name_type"]'))              #Remove Tag
    newNode = ET.SubElement(way, '''tag k="addr:street" v="{} {}"'''.format(name_base, name_type))    #Add New Tag
tree.write(r"C:\Users\Rakesh\Desktop\testFiles\A2.xml")               #Write to file

Output:

<root><waychangeset="14926577"id="11005330"timestamp="2013-02-05T20:56:45Z"uid="451693"user="bot-mode"version="2"><ndref="98006629" /><ndref="98006630" /><ndref="98006631" /><tagk="highway"v="residential" /><tagk="name"v="Kiwi Court" /><tagk="tiger:cfcc"v="A41" /><tagk="tiger:county"v="Lake, FL" /><tagk="tiger:reviewed"v="no" /><tagk="tiger:zip_left"v="34714" /><tagk="tiger:zip_right"v="34714" /><tagk="addr:street"v="Kiwi Ct" /></way></root>

Post a Comment for "Take 2 Xml Elements And Merge Into 1 New Element - Python"