Получение последнего (новейшего) элемента с помощью lxml, python

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

Я пытаюсь получить последний элемент из моего 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] и отлично сохраняет идентификатор, но вместо этого мне нужен последний/самый новый/etc элемент.

Спасибо,

Стив


person TheLifeOfSteve    schedule 17.11.2010    source источник
comment
Упорядочены ли элементы, т. е. элемент с наибольшим идентификатором будет последним в XML? (Если это так, у Ubuntu есть правильный ответ).   -  person    schedule 17.11.2010


Ответы (1)


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

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

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

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

api_id = max(map(int,data.xpath('//project/id/text()')))
person unutbu    schedule 17.11.2010
comment
отлично, я не уверен, почему я не подумал об этом раньше! - person TheLifeOfSteve; 17.11.2010
comment
Без проблем; Рад, что смог помочь. - person unutbu; 17.11.2010