Chercher la valeur d'un élement dans un fichier xml
BPyhton
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
fifrelin -
fifrelin -
Bonjour,
Je chercher à récupérer les valeurs d'un fichier xml qui se présente ainsi :
Le fichier continu ensuite avec des prévisions toutes les heures. Il y a de nouveau la balise "forecast' et les mêmes données que celles présenter ici entre les balises "forecast" et "/forecast"
Mon objectif est de venir récupérer la valeur de température sous la balise "temp", "metric" (ici 21).
Mon code est le suivant :
mais cette commande ne fonctionne pas et je ne comprend pas pourquoi?
pouvez vous m'aider?
Je chercher à récupérer les valeurs d'un fichier xml qui se présente ainsi :
<response> <version>0.1</version> <termsofService>[http://www.wunderground.com/weather/api/d/terms.html</termsofService>] <features> <feature>hourly10day</feature> </features> <hourly_forecast> <forecast> <FCTTIME> <hour>10</hour><hour_padded>10</hour_padded><min>00</min><min_unpadded>0</min_unpadded><sec>0</sec><year>2016</year><mon>6</mon><mon_padded>06</mon_padded><mon_abbrev>Jun</mon_abbrev><mday>27</mday><mday_padded>27</mday_padded><yday>178</yday><isdst>1</isdst><epoch>1467014400</epoch><pretty>10:00 AM CEST on June 27, 2016</pretty><civil>10:00 AM</civil><month_name>June</month_name><month_name_abbrev>Jun</month_name_abbrev><weekday_name>Monday</weekday_name><weekday_name_night>Monday Night</weekday_name_night><weekday_name_abbrev>Mon</weekday_name_abbrev><weekday_name_unlang>Monday</weekday_name_unlang><weekday_name_night_unlang>Monday Night</weekday_name_night_unlang><ampm>AM</ampm><tz></tz><age></age><UTCDATE></UTCDATE> </FCTTIME> <temp> <english>70</english> <metric>21</metric> </temp> <dewpoint> <english>61</english> <metric>16</metric> </dewpoint> <condition>Clear</condition> <icon>clear</icon> <icon_url>[http://icons.wxug.com/i/c/k/clear.gif</icon_url>] <fctcode>1</fctcode> <sky>25</sky> <wspd> <english>8</english> <metric>13</metric> </wspd> <wdir> <dir>S</dir> <degrees>179</degrees> </wdir> <wx>Mostly Sunny</wx> <uvi>3</uvi> <humidity>73</humidity> <windchill> <english>-9999</english> <metric>-9999</metric> </windchill> <heatindex> <english>-9999</english> <metric>-9999</metric> </heatindex> <feelslike> <english>70</english> <metric>21</metric> </feelslike> <qpf> <english>0.0</english> <metric>0</metric> </qpf> <snow> <english>0.0</english> <metric>0</metric> </snow> <pop>0</pop> <mslp> <english>29.97</english> <metric>1015</metric> </mslp> </forecast>
Le fichier continu ensuite avec des prévisions toutes les heures. Il y a de nouveau la balise "forecast' et les mêmes données que celles présenter ici entre les balises "forecast" et "/forecast"
Mon objectif est de venir récupérer la valeur de température sous la balise "temp", "metric" (ici 21).
Mon code est le suivant :
import urllib import sys from xml.dom import minidom urllib.urlretrieve('http://api.wunderground.com/api/ee112761216338cd/hourly10day/lang:EN/q/France/Carros.xml', '/home/pi/B/Carros.xml') # cette commande me permet d'aller télécharger un fichier fichierparse= minidom.parse('/home/pi/B/Carros.xml') # je parse monfichier à l'aide de la fonction minidom ## je regarde la première fois ou hour est égale à 0 for h in range(0,24): if int(fichierparse.getElementsByTagName('hour')[h].firstChild.data) == 0: # on cherche la première fois du fichier ou l'heure est égale à minuit break ##je cherche le fils dont le nom est "temp" for h in range (0,4): if (fichierparse.getElementsByTagName('forecast')[h]).childNodes[h].nodeName == 'temp': #je lis la valeur du premier enfant de temp resul = fichierparse.getElementsByTagName('temp')[h].firstChild.data
mais cette commande ne fonctionne pas et je ne comprend pas pourquoi?
pouvez vous m'aider?
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ICI Merci d'y penser dans tes prochains messages. |
A voir également:
- Chercher la valeur d'un élement dans un fichier xml
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier bin - Guide
- Forcer la suppression d'un fichier - Guide
- Fichier rar - Guide
1 réponse
Salut,
Je pense que la bibliothèque dom de python n'est pas la meilleure, etree est plus simple à manipuler et beaucoup plus intuitif, et surtout permet de faire des requêtes xpath.
D'après ce que tu souhaites, il est alors simple de récupérer les valeurs des noeuds xml désirés.
Exemple simple :
Je te laisse l'adapter à ce que tu souhaites obtenir.
Je pense que la bibliothèque dom de python n'est pas la meilleure, etree est plus simple à manipuler et beaucoup plus intuitif, et surtout permet de faire des requêtes xpath.
D'après ce que tu souhaites, il est alors simple de récupérer les valeurs des noeuds xml désirés.
Exemple simple :
import xml.etree.ElementTree as eltree
xml = eltree.parse('fichier_xmll')
doc = xml.getroot()
nodes = doc.find('hourly_forecast').findall('forecast')
for node in nodes :
hour = node.find('FCTTIME/hour').text
temp = node.find('temp/metric').text
print('hour : {}, temp : {}'.format(hour, temp))
Je te laisse l'adapter à ce que tu souhaites obtenir.