Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

récupérer la valeur d'une balise

2 réponses
Avatar
bpython
Bonjour,

Je travaille en python sur le fichier xml qui a la structure suivante :

forecast
FCTTIME
hour0/hourhour_padded00/hour_padded
/FCTTIME
temp
english64/english
metric18/metric
/temp

Je désire récupérer la valeur de 'temp' en 'metric' (en l'occurence ici 18).

Dans le code que j'ai écrit j'arrive bien à récupérer le nom des balises avec la fonction nodeName mais impossible de récupérer la valeur , j'utilise nodeValue :

doc= minidom.parse('/home/pi/Bea/Carros.xml') #cree un arbre DOM à partir d'un fichier xml

#récupération des données journalières
for h in range(0,24):
if int(doc.getElementsByTagName('hour')[h].firstChild.data) == 0: # on cherche la première fois du fichier ou l'heure est égale à minuit
break


# je récupère les noeuds fils du noeud forecast (forecast = 2ème parent de hour)
# je regarde ceux dont je veux récupérer les valeurs
for h in range (0,4):
if ((doc.getElementsByTagName('hour')[h].parentNode).parentNode).childNodes[h].nodeName == 'temp':
for i in range (0,5):
resul = (((doc.getElementsByTagName('hour')[h].parentNode).parentNode).childNodes[h]).childNodes[i].nodeValue
print (resul)

est ce quelqu'un peut m'expliquer pourquoi la fonction nodeValue ne fonctionne pas dans ce cas et quelle fonction je pourrais utiliser?

Merci

2 réponses

Avatar
Nicolas
Bonjour,

Le 10/05/2016 à 09:22, bpython a écrit :
Bonjour,

Je travaille en python sur le fichier xml qui a la structure suivante :

forecast
FCTTIME
hour0/hourhour_padded00/hour_padded
/FCTTIME
temp
english64/english
metric18/metric
/temp

Je désire récupérer la valeur de 'temp' en 'metric' (en l'occurence ici 18).

Dans le code que j'ai écrit j'arrive bien à récupérer le nom des balises avec la
fonction nodeName mais impossible de récupérer la valeur , j'utilise nodeValue
:

doc= minidom.parse('/home/pi/Bea/Carros.xml') #cree un arbre DOM à partir d'un
fichier xml

#récupération des données journalières
for h in range(0,24):
if int(doc.getElementsByTagName('hour')[h].firstChild.data) == 0: # on
cherche la première fois du fichier ou l'heure est égale à minuit
break


# je récupère les noeuds fils du noeud forecast (forecast = 2ème parent de
hour)
# je regarde ceux dont je veux récupérer les valeurs
for h in range (0,4):
if
((doc.getElementsByTagName('hour')[h].parentNode).parentNode).childNodes[h].nodeName
== 'temp':
for i in range (0,5):
resul > (((doc.getElementsByTagName('hour')[h].parentNode).parentNode).childNodes[h]).childNodes[i].nodeValue
print (resul)

est ce quelqu'un peut m'expliquer pourquoi la fonction nodeValue ne fonctionne
pas dans ce cas et quelle fonction je pourrais utiliser?


Que veut dire "la fonction nodeValue ne fonctionne pas" ?

Il faudrait un code minimaliste fonctionnel et le message d'erreur pour
pouvoir faire un diagnostique. Un vecteur de test permettant de
reproduire le problème serait le bienvenu également.

Sinon, utiliser les data au format json pourrait être plus simple.

Nicolas


Merci

Avatar
Damien Wyart
Je travaille en python sur le fichier xml qui a la structure suivante :

forecast
FCTTIME
hour0/hourhour_padded00/hour_padded
/FCTTIME
temp
english64/english
metric18/metric
/temp

Je désire récupérer la valeur de 'temp' en 'metric' (en l'occurence ici 18).



Vous pourrez trouver des pistes dans cette discussion (qui aborde
minidom ainsi que d'autres modules assez intéressants pour le XML comme
lxml ou ElementTree) :

http://stackoverflow.com/questions/1912434/how-do-i-parse-xml-in-python

--
DW