2010-11-16 6 views
0

J'ai un petit problème. J'essaie d'extraire des données de mon XML en utilisant lxml et je continue d'obtenir une erreur "list index out of range", maintenant j'essaye d'obtenir la position [0] de ma liste, qui devrait être la première mais ça continue me donner l'erreur.Utilisation de lxml & django/python - index de liste hors plage

Voici un extrait de code (grâce à Matth pour me aider):

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() 

Maintenant, quand je fais une déclaration d'impression, il tire le XML donc je sais que j'ai données xml et son pas vide , mais ne savez pas quoi d'autre pourrait causer cela?

Merci!

Steve

+0

Quelle est la structure XML ("project" et "id" sont des éléments, non ?!)? Que fait 'print repr (data.xpath ('/ project/id/text()')))' sortie? – AndiDog

+0

structure se présente comme suit: TheLifeOfSteve

+0

lors d'une tentative d'impression rééd (data.xpath ('/ projet/id/text())) ... il délivre en sortie '[]' – TheLifeOfSteve

Répondre

2

Avec la structure de votre document XML étant

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

votre expression XPath /project/id/text() ne sera sûrement pas correspondre à quelque chose, et l'indice accédant 0 de la liste des résultats XPath vide des résultats de cours dans un IndexError . Au lieu de /project, qui ne correspond qu'à un élément racine (!) Appelé "projet", vous pouvez utiliser /projects/project ou //project. Donc, un XPath correct pour votre structure XML serait //project/id/text().

+0

merci AndiDog, cela a semblé fonctionner. Je vois maintenant ce que vous disiez, je ne suis pas allé assez loin dans le XML, alors c'est pourquoi je recevais l'erreur d'index. Une question moins, est-il possible de trouver l'entrée la plus récente? – TheLifeOfSteve

Questions connexes