Почему бы не использовать xmlToDict
и перебирать ключи? Вы можете использовать json.dumps
в OrderedDict (, например, ), если вы просто хотите использовать обычный диктовку, но вот пример, предполагающий, что вы хотите сохранить порядок.
Предполагается, что вы исправили свой XML, удалив этот дубликат тега <State>
и использовав закрывающий тег </Data>
.
import xmltodict
from collections import OrderedDict
def listRecursive(d, key):
for k, v in d.items():
if isinstance(v, OrderedDict):
for found in listRecursive(v, key):
yield found
if k == key:
yield v
with open('PATH\\TO\\xmlFile.xml') as fd:
xmlDict = xmltodict.parse(fd.read())
states = []
for result in listRecursive(xmlDict, 'State'):
states.append(result)
states = states[0]
Вот pprint
результатов, при условии, что вы добавите другой штат после Сингапура с именем NewState
[OrderedDict([('@name', 'Singapore'),
('rank', '4'),
('year', '2011'),
('gdppc', '59900'),
('neighbor',
OrderedDict([('@name', 'Malaysia'), ('@direction', 'N')]))]),
OrderedDict([('@name', 'NewState'),
('rank', '7'),
('year', '2020'),
('gdppc', '99999'),
('neighbor',
[OrderedDict([('@name', 'Unknown1'), ('@direction', 'S')]),
OrderedDict([('@name', 'Unknown2'), ('@direction', 'N')])])])]