這是我想使用的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來完成。請檢查。 –