使用Python从XML数据创建字典(使用xml.etree.ElementTree)

时间:2015-12-26 08:11:53

标签: python xml xml-parsing

我遇到与this answered question中提出的问题类似的困难,除了提供的解决方案不适用于我的问题版本。

使用此示例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)

2 个答案:

答案 0 :(得分:0)

使用findallfind方法查找element个标签及其namevalue个孩子:

>>> 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'}

答案 1 :(得分:0)

另一种尝试可能是使用xpathlxml.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}

输出 -

{'XYZ': '789', 'ABC': '123'}