Reputation: 59
I have this XML code:
<ProceduresDB>
<Airport ICAOcode="EHRD">
<Sid Name="ANDI1A" Runways="06">
<Sid_Waypoint ID="1">
<Latitude>0.000000</Latitude>
<Longitude>0.000000</Longitude>
</Sid_Waypoint>
<Sid_Waypoint ID="2">
<Latitude>51.973697</Latitude>
<Longitude>4.480970</Longitude>
</Sid_Waypoint>
<Sid Name="ARNE2A" Runways="06">
<Sid_Waypoint ID="1">
etc etc
How do I get for example all the latitudes and longitudes for each waypoint for Sid
with Name='ANDI1A'
?
I've been trying to come up with something using lxml, but most tutorials/howto's do cover XML documents with nested children.
Upvotes: 1
Views: 583
Reputation: 473753
You can use .//Sid[@Name="ANDI1A"]/Sid_Waypoint
xpath
expression:
import lxml.etree as ET
data = """<ProceduresDB>
<Airport ICAOcode="EHRD">
<Sid Name="ANDI1A" Runways="06">
<Sid_Waypoint ID="1">
<Latitude>0.000000</Latitude>
<Longitude>0.000000</Longitude>
</Sid_Waypoint>
<Sid_Waypoint ID="2">
<Latitude>51.973697</Latitude>
<Longitude>4.480970</Longitude>
</Sid_Waypoint>
</Sid>
</Airport>
</ProceduresDB>"""
tree = ET.fromstring(data)
for waypoint in tree.findall('.//Sid[@Name="ANDI1A"]/Sid_Waypoint'):
print "Waypoint %s" % waypoint.attrib["ID"]
for item in waypoint:
print item.tag, item.text
Prints:
Waypoint 1
Latitude 0.000000
Longitude 0.000000
Waypoint 2
Latitude 51.973697
Longitude 4.480970
Upvotes: 1