无法在python中迭代xml并创建具有所需属性的字典



我对python和xml很陌生。实际上,我正在尝试提取两个属性(汽车品牌、汽车定义(值,并创建一个字典。我一次只能迭代一个属性,但我的目标是将两个属性一起迭代,这样我就可以创建一个字典。

我想要的输出是{"BMW":"C1","FORD":"C2","TOYOTA":"k1"}

import xml.etree.ElementTree as ET
def cars():
str1='''
<?xml version="1.0" encoding="UTF-8"?>
<vehicles xmlns:xsi="https://cars.com" >
<vehicle>
<vehicle-brand>BMW</vehicle-brand>
<cars>
<car>
<car-type>MID</car-type>
<car-definition>C1</car-definition>
</car>
</cars>
</vehicle>
<vehicle>
<vehicle-brand>FORD</vehicle-brand>
<cars>
<car>
<car-type>LARGE</car-type> 
<car-definition>C2</car-definition>
</car>
</cars>
</vehicle>
<vehicle>
<vehicle-brand>TOYOTA</vehicle-brand>
<cars>
<car>
<car-type>SMALL</car-type> 
<car-definition>K1</car-definition>
</car>
</cars>
</vehicle>
</vehicles>'''
try:
e = ET.ElementTree(ET.fromstring(str1))
for elt in e.iter('car-definition'):
print(elt.tag, elt.text)      

except Exception as e:
print("error")
raise e

考虑一个dict理解,它在每个<vehicle>下的每个<car>子代上迭代,检索字典键值对的元素文本:

xml_dict = {
veh.find("vehicle-brand").text: car.find("car-definition").text
for veh in doc.iterfind("vehicle")   
for car in veh.iterfind("cars/car") 
}
xml_dict
{'BMW': 'C1', 'FORD': 'C2', 'TOYOTA': 'K1'}

由于<cars>可以扩展到每个<vehicle>的许多倍数,因此为每个不同的车辆嵌套汽车列表:

xml_dict = {
veh.find("vehicle-brand").text: 
[car.find("car-definition").text 
for car in veh.iterfind("cars/car")]
for veh in doc.iterfind("vehicle") 
}
xml_dict
{'BMW': ['C1'], 'FORD': ['C2'], 'TOYOTA': ['K1']}

最新更新