使用lxml与django/python - 列表索引超出范围
我遇到一个小问题。我正在用lxml从我的XML中提取一些数据,但总是出现“列表索引超出范围”的错误。我想获取列表中的第一个位置,也就是[0],但总是报错。
这里有一段代码(感谢MattH的帮助):
req2 = urllib2.Request("web_url/public/api.php?path_info=/projects&token=##############")
resp = urllib2.urlopen(req2)
resp_data = resp.read()
if not resp.code == 200 and resp.headers.get('content-type') == 'text/xml':
# Do your error handling.
raise Exception('Unexpected response',req2,resp)
data = etree.XML(resp_data)
api_id = int(data.xpath('/project/id/text()')[0])
project.API_id = api_id
project.save()
现在当我打印的时候,它能提取出XML数据,所以我知道我的XML数据不是空的,但我不太确定还有什么可能导致这个问题?
谢谢!
史蒂夫
1 个回答
4
你的XML文档结构是这样的:
<projects>
<projects>
<id>
...
</id>
</project>
</projects>
那么你的XPath表达式 /project/id/text()
肯定是找不到任何东西的,因此当你试图访问这个空的XPath结果列表的第0个索引时,自然会出现一个 IndexError
错误。
与其使用 /project
(这只匹配一个名为“project”的根元素),你可能更想用 /projects/project
或者 //project
。所以,针对你的XML结构,正确的XPath应该是 //project/id/text()
。