Python直接从网址解析XML

2 投票
2 回答
8170 浏览
提问于 2025-04-16 13:55

你好。我试着找办法,但没找到。我在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)

撰写回答