2015-12-26 2 views
1

У меня схожие трудности с тем, что было поставлено в this answered question, за исключением того, что предоставленное решение не работает с моей версией проблемы.Создание словарей из XML-данных в Python (с xml.etree.ElementTree)

С помощью этих данных XML образца:

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <element> 
     <name>XYZ</name> 
     <value>789</value> 
    </element> 
    <element> 
     <name>ABC</name> 
     <value>123</value> 
    </element> 
</root> 

Моя цель состоит в том, чтобы получить словарь с ключами XYZ, ABC и соответствующие значения 789,123. Другими словами, он должен вывести так же, как:

dict(XYZ=789,ABC=123) 

ответ

0

Найти element теги и их name, value детей с помощью findall и find методы:

>>> import xml.etree.ElementTree as ET 
>>> 
>>> root = ET.fromstring('''<?xml version="1.0" encoding="UTF-8"?> 
... <root> 
...  <element> 
...   <name>XYZ</name> 
...   <value>789</value> 
...  </element> 
...  <element> 
...   <name>ABC</name> 
...   <value>123</value> 
...  </element> 
... </root> 
... ''') 
>>> {e.find('name').text: e.find('value').text for e in root.findall('element')} 
{'XYZ': '789', 'ABC': '123'} 
+0

не мог просить лучший ответ. Благодаря! – CannedSpinach

0

Другая попытка может использовать xpath и lxml.etree.

from lxml import etree 

s="""<root> 
    <element> 
     <name>XYZ</name> 
     <value>789</value> 
    </element> 
    <element> 
     <name>ABC</name> 
     <value>123</value> 
    </element> 
</root>""" 
tree = etree.fromstring(s) 
data = [(i.xpath("./name//text()")[0],i.xpath("./value//text()")[0]) for i in tree.xpath("//element")] 
print {k:v for k,v in data} 

output-

{'XYZ': '789', 'ABC': '123'} 
Смежные вопросы