2010-11-17 2 views
1

Привет всем, мне помогли последние пару дней в попытке решить мою проблему. У меня только один вопрос (надеюсь) :)Получение последнего (новейшего) элемента с 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] и сохраняет ID просто отлично, но мне нужен поздний/новейший/и т.д. элемент вместо этого.

Спасибо,

Стив

+0

упорядочены элементы, то есть будет один с наибольшим ID последним в XML? (Если это так, ubuntu имеет правильный ответ). – delnan

ответ

5

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

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

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

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

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

отлично, я не уверен, почему я не думал об этом раньше! – TheLifeOfSteve

+0

Нет проблем; Рад, что смог помочь. – unutbu

Смежные вопросы