Python直接从网址解析XML
你好。我试着找办法,但没找到。我在Python中设置了一个xml.sax解析器,它在读取本地文件(比如calendar.xml)时工作得很好,但我需要从一个网络地址读取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文件?另外要注意的是,这个网址的名称并没有以“.xml”结尾,这可能会导致后面的问题。
2 个回答
2
parser.parse(xyz)
parser.parseString(xyz)
这个地方希望xyz是一个文件;而你正在寻找的是
它希望xyz是一个包含XML内容的字符串。
3
首先,你的例子有点混乱。请不要重复使用变量。
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)