我遇到与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)
答案 0 :(得分:0)
使用findall
和find
方法查找element
个标签及其name
,value
个孩子:
>>> 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)
另一种尝试可能是使用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}
输出 -
{'XYZ': '789', 'ABC': '123'}