2012-07-12 33 views
2

這裏是XML:Python的elementree有很難提取數據

<top> 
    <target> 
     <name>TARGET_NAME_1</name> 
     <error_count>5</error_count> 
     <error_examples>a string goes here</error_examples> 
    </target> 
    <target> 
     <name>TARGET_NAME_2</name> 
     <error_count>5</error_count> 
     <error_examples>a string goes here</error_examples> 
    </target> 
</top> 

這裏是我嘗試:

tree = ETREE.parse(str(XML_FILE_PATH)) #this seems to work 
top = tree.getroot() 
targets = top.findall('target') 
for target in targets: 
    print target 

這給了我<Element target at HEX_NUMBER>。那麼如何提取每個目標的價值,即TARGET_NAME_1

乾杯

編輯 - 我要指出,我在Python版本2.6

回答

2

說你想打印所有的名字,你可以做象下面這樣:

import xml.etree.ElementTree as ET 
tree = ET.parse("people.xml") 
top = tree.getroot() 

for target in top: 
    for x in target: 
     if x.tag == 'name': print x.text 

較短獲得第一目標的名字:

print top[0][0].text 

但因爲它依賴於項目訂單,甚至不檢查項目是否正確,你可能不應該這樣做

因此,要獲得所有的名稱和唯一的名字,我可能會使用如下的列表理解:

[target.find('name').text for target in top] 
+0

是的,這似乎工作。我對這樣做並不是瘋狂的,但我現在只是想要一起破解一些東西。 – JDS 2012-07-12 22:11:48

2

嘗試target.get('name')

我從http://docs.python.org/library/xml.etree.elementtree.html#xml.etree.ElementTree.Element.get的文檔中得到了這個消息,看起來它就是你要找的東西。

+0

是的,我一直在試圖遵循這一點,但當我通過for循環打印(使用您的代碼行)時,輸出「None」作爲輸出。 – JDS 2012-07-12 21:49:33

+0

打印出目標(dir)時,有哪些方法可用?當你嘗試'target ['name']'或target ['error_count']'時,你會得到什麼? – girasquid 2012-07-12 21:52:09