Получение последнего (новейшего) элемента с помощью lxml, python - PullRequest
1 голос
/ 17 ноября 2010

Привет всем, за последние пару дней я оказал потрясающую помощь в решении моей проблемы. У меня только один последний вопрос (надеюсь):)

Я пытаюсь получить последний элемент из моего xml и поместить его в переменную. Я использую django, python и библиотеку lxml.

Что я хочу сделать, так это просмотреть XML-код, полученный от вызова API, найти самый новый проект (он будет иметь самый большой идентификационный номер), а затем назначить его переменной для хранения в моей базе данных. У меня возникли проблемы с поиском того, как найти этот последний, самый новый элемент.

Вот фрагмент кода:

req2 = urllib2.Request("http://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)
        #assigns the api_id to the id at index of 0 for time being,  using the // in front of project makes sure that its looking at the correct node inside of the projects structure
        api_id = int(data.xpath('//project/id/text()')[0])
        project.API_id = api_id
        project.save()

На данный момент он принимает элемент в [0] и прекрасно хранит идентификатор, но вместо этого мне нужен самый последний элемент / newest / etc.

Спасибо

Steve

1 Ответ

5 голосов
/ 17 ноября 2010

Измените [0] на [-1], чтобы выбрать последний элемент в списке:

api_id = int(data.xpath('//project/id/text()')[-1])

Обратите внимание, что это может не дать вам наибольшее id значение, если наибольшее не находится в конце списка.

Чтобы получить наибольшее значение id, вы можете сделать это:

api_id = max(map(int,data.xpath('//project/id/text()')))
...