我对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']}