使用lxml与django/python - 列表索引超出范围

1 投票
1 回答
2170 浏览
提问于 2025-04-16 07:09

我遇到一个小问题。我正在用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()

撰写回答