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

问题描述 投票:0回答:1

我有一个小问题。我正在尝试使用 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 数据并且它不为空,但不确定还有什么可能导致此情况?

谢谢!

史蒂夫

python django django-views lxml
1个回答
4
投票

您的 XML 文档的结构是

<projects>
    <projects>
        <id>
            ...
        </id>
    </project>
</projects>

您的 XPath 表达式

/project/id/text()
肯定不会匹配任何内容,并且空 XPath 结果列表的访问索引 0 当然会导致
IndexError

您可能需要使用

/project
/projects/project
,而不是仅匹配名为“project”的根 (!) 元素的
//project
。因此,您的 XML 结构的正确 XPath 是
//project/id/text()

© www.soinside.com 2019 - 2024. All rights reserved.