2011-03-17 87 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的字符串。