Использование lxml & django / python - индекс списка вне диапазона - PullRequest
0 голосов
/ 16 ноября 2010

У меня небольшая проблема.Я пытаюсь извлечь некоторые данные из моего XML, используя lxml, и я продолжаю получать ошибку «индекс списка вне диапазона», теперь я пытаюсь получить позицию [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 Ответ

2 голосов
/ 16 ноября 2010

Со структурой вашего XML-документа

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

ваше выражение XPath /project/id/text() точно не будет ничего совпадать, и индекс доступа к пустому списку результатов XPath, конечно, приведет к IndexError.

Вместо /project, который соответствует только корневому (!) Элементу с именем "project", вы можете использовать /projects/project или //project. Таким образом, правильный XPath для вашей XML-структуры будет //project/id/text().

...