context.next()
использует первый узел:
In [14]: tree = etree.iterparse(state_file_xml, events=("start", "end"),tag=('node'))
In [15]: context = iter(tree)
In [16]: event, root = next(context)
In [17]: root.attrib
Out[17]: {'id': '30228243', 'lon': '8.4049015', 'lat': '47.4030908'}
(я изменил context.next()
на next(context)
, чтобы код мог работать как с Python2, так и с Python3.)
Кстати, iterparse
возвращает итератор, поэтому context = iter(tree)
не требуется.И поскольку вам нужно обрабатывать каждый node
только один раз, events=("end",)
достаточно:
import lxml.etree as ET
context = ET.iterparse(state_file_xml, events=("end",), tag=('node'))
nodes = {}
for event, elem in context:
id = elem.get("id")
lat = float(elem.get("lat"))
lon = float(elem.get("lon"))
nodes[id] = [lat,lon]