这是我想使用的xml文件 我试图创建一个名为'dict1'的字典 它应该包含键“Pocket_substation”和“sub_substation” ,第一个键Pocket_substation应该包含所有的input_names,而sub_substation键应该包含所有的output_names。”我想在一个类中支持以下功能的结果:...“
<input_layer name = "Pocket_Substation"/>
<output_layer name = "sub_substation"/>
<field_mapping>
<field input_name = "dat" output_name="date" />
<field input_name = "Type" output_name="type"/>
<field input_name = "Class" output_name="class"/>
<field input_name = "Land" output_name="land"/>
<field input_name = "status" output_name="status"/>
<field input_name = "descrp" output_name="description"/>
<field input_name = "Loc" output_name="location"/>
<field input_name = "voltage" output_name="voltage"/>
<field input_name = "name" output_name="owner_name"/>
<field input_name = "Remarks" output_name="remarks"/>
</field_mapping>
,并选择所有input_names我写
for elem in tree.iter(tag='field'):
print elem.attrib
for ele in elem.attrib(tag='input_name'):
print ele.attrib
,但只打印第一个值。有人帮我在代码中解决这个 功能:
def read_field(xml_node, name):
return [child.get(name) for child in xml_node.iter('field')]
def read_map(xml_node):
f = root.attrib
dict1 = {f['name']:['input_layer','output_layer','fields']}
dict1[f['name']][0] = {'input_layer':root.find('input_layer').get('name')}
dict1[f['name']][1] = {'output_layer':root.find('output_layer').get('name')}
for child in xml_node:
if child.tag == 'field_mapping':
fields = {field_name : read_field(child, field_name) for field_name
in ['input_name','output_name']}
dict1[f['name']][2] =
{'fields':dict(zip(fields['output_name'],fields['input_name']))}
return dict1
你在使用ElementTree吗?您还可以添加更多的代码,以便我们看到您如何访问这些元素? –
进口xml.etree.ElementTree如ET 树= ET.parse( 'substation.xml') 根= tree.getroot() 用于child_of_root在根: \t打印child_of_root.tag 它给所有的孩子的根。 在tree.iter()ELEM: \t打印elem.tag,elem.attrib 它给所有的属性 但我不能分开“input_name”和“output_name中”属性 –
@Elango我已经编辑了答案并展示了如何使用ElementTree来完成。请检查。 –