2017-09-14 50 views
0

我正嘗試從XML文件中的元素讀取每個子標記和屬性。下面列出了一個xml的例子。如何在Python中使用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

什麼是所需的輸出?你到目前爲止還嘗試過什麼? – Marco

回答

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'})] 
+0

這正是我所期待的。感謝您的幫助! – Akkarris

+0

@Akkarris歡迎您,不要猶豫,如果它是值得的答案旗幟。 –

相關問題