【发布时间】:2013-04-13 15:27:10
【问题描述】:
我对 python 脚本语言非常陌生,最近正在研究一个解析基于 Web 的 xml 文件的解析器。
我可以在 python 中使用 minidom 检索除一个元素以外的所有元素,没有任何问题,但是我有一个节点遇到问题。我从 XML 文件中需要的最后一个节点是“图像”标签中的“url”,这可以在以下 xml 文件示例中找到:
<events>
<event id="abcde01">
<title> Name of event </title>
<url> The URL of the Event <- the url tag I do not need </url>
<image>
<url> THE URL I DO NEED </url>
</image>
</event>
下面我复制了我认为可能相关的代码的简短部分。我非常感谢任何帮助以检索最后一个图像 url 节点。我还将包括我尝试过的内容以及在 GAE 中运行此代码时收到的错误。我使用的 python 版本是 Python 2.7,我可能还应该指出我将它们保存在一个数组中(以便稍后输入到数据库)。
class XMLParser(webapp2.RequestHandler):
def get(self):
base_url = 'http://api.eventful.com/rest/events/search?location=Dublin&date=Today'
#downloads data from xml file:
response = urllib.urlopen(base_url)
#converts data to string
data = response.read()
unicode_data = data.decode('utf-8')
data = unicode_data.encode('ascii','ignore')
#closes file
response.close()
#parses xml downloaded
dom = mdom.parseString(data)
node = dom.documentElement #needed for declaration of variable
#print out all event names (titles) found in the eventful xml
event_main = dom.getElementsByTagName('event')
#URLs list parsing - MY ATTEMPT -
urls_list = []
for im in event_main:
image_url = image.getElementsByTagName("image")[0].childNodes[0]
urls_list.append(image_url)
我收到的错误如下,非常感谢您的帮助,凯伦
image_url = im.getElementsByTagName("image")[0].childNodes[0]
IndexError: list index out of range
【问题讨论】:
-
不要对数据进行解码和重新编码!将解码留给 XML 解析器。有什么理由不能使用ElementTree API 代替 minidom?
-
该 URL 为我返回错误响应;我收到一条
Authentication Error消息。也许你也这样做? -
嗨@MartijnPieters,我已经省略了这个例子的api键,因为我认为它会让它更简单。如果您觉得这会更有用,我可以插入 api 密钥,但是我对此没有任何问题,访问图像标签的元素更是如此。由于在 xml 数据中发现黑色星的编码问题,在解析 xml 数据后,我不得不对其进行解码和重新编码。 stackoverflow.com/questions/16026594/…
-
这看起来不像是 XML 输入 的问题!你有 encoding Unicode 数据,错误不在于你的 XML。那里的问题很可能与
print状态有关,无论您当时的stdout是什么。但是,如果没有无法进一步诊断的回溯。 -
不需要API密钥,只需要覆盖所有的基础。
标签: python xml python-2.7