我有一个小问题。我正在尝试使用 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 数据并且它不为空,但不确定还有什么可能导致此情况?
谢谢!
史蒂夫
您的 XML 文档的结构是
<projects>
<projects>
<id>
...
</id>
</project>
</projects>
您的 XPath 表达式
/project/id/text()
肯定不会匹配任何内容,并且空 XPath 结果列表的访问索引 0 当然会导致 IndexError
。
您可能需要使用
/project
或 /projects/project
,而不是仅匹配名为“project”的根 (!) 元素的 //project
。因此,您的 XML 结构的正确 XPath 是 //project/id/text()
。