2011-03-17 101 views
2

嘿。我試圖找到一種方式,但我不能。我已經在python中建立了一個xml.sax解析器,當我讀取一個本地文件(例如calendar.xml)時它工作得很完美,但是我需要從一個web地址讀取一個xml文件。Python直接從網址解析xml

我想如果我這樣做,將工作:

toursxml='http://api.songkick.com/api/3.0/artists/mbid:'+mbid+'/calendar.xml?apikey=---------' 
toursurl=urllib2.urlopen(toursxml) 
toursurl=toursurl.read() 
parser.parse(toursurl) 

但它不。即時通訊確定一個簡單的方法,但我無法找到它。

所以是的,我可以很容易地轉至該網址並下載該文件,並通過做

parser.parse("calendar.xml") 

作爲工作打開它周圍的香港專業教育學院設置它來讀取該文件,並在本地創建該文件,關閉文件,然後閱讀它。但是,你可以猜到它的速度如此之慢。

有沒有人可以直接讀取xml?還要注意,url名稱不會以「.xml」結尾,以便稍後可能會出現問題

+0

首先,請儘量更精確:在適當的地方使用大寫字母。另外,請仔細閱讀API文檔。 – 2011-03-17 22:15:08

回答

2

首先,您的示例已混淆。請不要重複使用變量。

toursurl= urllib2.urlopen(toursxml) 
toursurl_string= toursurl.read() 
parser.parseString(toursurl_string) 

將整個文件讀入一個名爲toursurl_string的字符串。

要解析字符串,請使用parseString(toursurl_string)方法。

http://docs.python.org/library/xml.sax.html#xml.sax.parseString

如果你想閱讀和分析結合起來,你必須通過「流」或文件名進行解析。

toursurl= urllib2.urlopen(toursxml) 
parser.parse(toursurl) 
+0

有沒有一種方法可以從http流解析而不需要在內存中存儲巨大的字符串? – mruellan 2014-07-30 21:23:35

1
parser.parse(xyz) 

期望XYZ是一個文件;您正在尋找

parser.parseString(xyz) 

它預計xyz是一個包含XML的字符串。