我正在尝试从xml文件中的元素读取每个子标记和属性。下面列出了xml的一个示例。
<drCoreType Name="default">
<ModelType Name="default">
<ALTrVoltage Enable="No" Group="Other" Delay="0"/>
<ALTrCurrent Enable="Yes" Group="Minor" Delay="0"/>
<ALTrTeAmbient Enable="Yes" Group="Minor" Delay="5"/>
<ALTrTeTankTop Enable="No" Group="Minor" Delay="5"/>
<ALTrTeTankBottom Enable="No" Group="Minor" Delay="5"/>
<ALTrTeCTO Enable="No" Group="Other" Delay="5"/>
<ALTrTeCBO Enable="No" Group="Other" Delay="5"/>
继续使用100个不同的标签再增加100行。我试图在每个ModelType子,标签和属性中读入一个对象数组,而不使用.find(“name”)搜索每个名称。关于如何做到这一点的任何想法?我很难过,谷歌也没有太大的帮助。
答案 0 :(得分:1)
可能没有,但我喜欢xpath,所以你可以这样做:
import sys
import pprint
from lxml import etree
with open(sys.argv[1]) as xml_file:
tree = etree.parse(xml_file)
pprint.pprint([(element.tag, element.attrib) for element in
tree.xpath('//drCoreType/ModelType/*')])
这给:
[('ALTrVoltage', {'Enable': 'No', 'Group': 'Other', 'Delay': '0'}),
('ALTrCurrent', {'Enable': 'Yes', 'Group': 'Minor', 'Delay': '0'}),
('ALTrTeAmbient', {'Enable': 'Yes', 'Group': 'Minor', 'Delay': '5'}),
('ALTrTeTankTop', {'Enable': 'No', 'Group': 'Minor', 'Delay': '5'}),
('ALTrTeTankBottom', {'Enable': 'No', 'Group': 'Minor', 'Delay': '5'}),
('ALTrTeCTO', {'Enable': 'No', 'Group': 'Other', 'Delay': '5'}),
('ALTrTeCBO', {'Enable': 'No', 'Group': 'Other', 'Delay': '5'})]