2016-06-23 2 views
1

Это образец XML.Создать словарь из XML в Python

<?xml version="1.0" encoding="UTF-8"?> 
<Test plan_name="test"> 
    <Big bro="S7" sys="lolipop"> 
     <Work name="first"></Work> 
     <Work name="second"></Work> 
    </Big> 
    <Big bro="S6" sys="kitkat"> 
     <Work name="trird"></Work> 
     <Work name="fourth"></Work> 
    </Big> 
</Test> 

Моя цель - создать словарь с каждым названием и сохранить его в списке.

Это мой пример кода:

import xml.etree.ElementTree as ET 

tree = ET.parse(line[0].rstrip()+'/stack.xml') 
root = tree.getroot() 

total=[] 

for child in root.findall('Big'): 
    test=child.attrib 
    for children in child:  
    test.update(children.attrib) 
    total.append(test) 
print total 

Ожидаемый результат:

[{ 'братишка': 'S7', 'SYS': 'Lolipop', 'имя': «первая '}, {' bro ':' S7 ',' sys ':' lolipop ',' name ':' second '}, {' bro ':' S6 ',' sys ':' kitkat ',' name ': 'третьего'}, { 'братишка': 'S6', 'SYS': 'KitKat', 'имя': 'четвёртой'}]

Но мой результат выглядит следующим образом:

[{'bro': 'S7', 'sys': 'lolipop', 'name': 'second'}, {'bro': 'S7', 'sys': 'lolipop', ' 'name': 'second'}, {'bro': 'S6', 'sys': 'kitkat', 'name': '4th'}, {'bro': 'S6', 'sys': 'kitkat ',' name ':' 4th '}]

Помогите мне пожалуйста. Спасибо

+0

Что такое 'переменная ET'? 'ElementTree'? –

+0

есть. import xml.etree.ElementTree как ET будет выше. – Sam

ответ

1

Вы изменяете свой собственный код test, который также приводит к модификации ранее вставленной ссылки.
Он должен работать, создавая копию перед обновлением его:

... 
for child in root.findall('Big'): 
    test=child.attrib 
    for children in child:  
    testCopy = dict(test) 
    testCopy.update(children.attrib) 
    total.append(testCopy) 
print(total) 
... 
Смежные вопросы