Tôi có chức năng sau đây thực hiện công việc thô để phân tích cú pháp tệp XML thành từ điển.Làm thế nào chức năng này có thể được viết lại để thực hiện OrderedDict?
Thật không may, vì từ điển Python không được đặt hàng, tôi không thể chuyển qua các nút như tôi muốn.
Làm cách nào để thay đổi điều này để nó xuất ra từ điển được đặt hàng phản ánh thứ tự ban đầu của các nút khi được lặp với 'for'.
def simplexml_load_file(file):
import collections
from lxml import etree
tree = etree.parse(file)
root = tree.getroot()
def xml_to_item(el):
item = None
if el.text:
item = el.text
child_dicts = collections.defaultdict(list)
for child in el.getchildren():
child_dicts[child.tag].append(xml_to_item(child))
return dict(child_dicts) or item
def xml_to_dict(el):
return {el.tag: xml_to_item(el)}
return xml_to_dict(root)
x = simplexml_load_file('routines/test.xml')
print x
for y in x['root']:
print y
Đầu ra:
{'root': {
'a': ['1'],
'aa': [{'b': [{'c': ['2']}, '2']}],
'aaaa': [{'bb': ['4']}],
'aaa': ['3'],
'aaaaa': ['5']
}}
a
aa
aaaa
aaa
aaaaa
Làm thế nào tôi có thể thực hiện collections.OrderedDict vì vậy mà tôi có thể chắc chắn nhận được theo đúng thứ tự của các nút?
tập tin XML để tham khảo:
<root>
<a>1</a>
<aa>
<b>
<c>2</c>
</b>
<b>2</b>
</aa>
<aaa>3</aaa>
<aaaa>
<bb>4</bb>
</aaaa>
<aaaaa>5</aaaaa>
</root>
bản sao của http: // stackoverflow. com/questions/4123266/python-looping-dường như không theo dõi bởi cùng một tác giả. –