2012-08-26 73 views
0

我對python真的很陌生。這實際上是我的第一個腳本,它大部分是一個複製的例子。我有一個XML文件,我需要解析出一個屬性。我得到了那部分,但我的問題是,該屬性並不總是存在於xml文件中。這裏是我的代碼:在python中解析xml有問題

#!/usr/bin/python 
#import library to do http requests: 
import urllib2 
import os 

#import easy to use xml parser called minidom: 
from xml.dom.minidom import parseString 

#download the history: 
history = urllib2.urlopen('http://192.168.1.1/example.xml') 
#convert to string: 
historydata = history.read() 
history.close() 

#parse the xml you downloaded 
dom = parseString(historydata) 
xmlTagHistory = dom.getElementsByTagName('loaded')[0].toxml() 
xmlDataHistory=xmlTagHistory.replace('<loaded>','').replace('</loaded>','') 

print xmlDataHistory 

當屬性doesnt存在我得到「IndexError:列表索引超出範圍」的返回。我試圖用這個代碼做的事是讓它在屬性不存在的情況下運行一個命令,或者它是假的。另一個我可能會遇到的問題是,有些時候該屬性會出現多次,所以如果甚至有一個「已加載」的實例爲真,我還需要通過不運行該命令來解決該情況。正如我所說,我真的很新,所以我可以使用我可以得到的所有幫助。非常感激。

+0

你正在解析'loaded'這是一個「元素」。在XML文檔中,「屬性」這個詞指的是「href」所在的類型,如'Example'。 – minopret

回答

2

由於dom.getElementsByTagName('loaded')返回一個列表,您可以使用len(list)函數檢查列表大小。只有列表長度大於0,是否有效執行[0]取消引用。

另一種方法是將代碼封裝在try/exception對中並捕獲解析異常。