Bonjour à tous!

J'aimerais extraire les données d'un fichier xml mais je rencontre un problême ac les différents noeuds! J'utilise tinyxml

Je vous link un bout de mon fichier xml pour vous montrer mon probleme

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?xml version="1.0" encoding="utf-8" ?> 
- <!--  Commentss: XmlWriter Bulletin Meteorem 
  --> 
- <forecast>
- <localization value="Rillieuxlapape_69">
- <day value="01/12/05">
  <sunrise>08:01</sunrise> 
  <sunset>16:57</sunset> 
- <hour value="06:00">
  <weather>Ensoleillé</weather> 
  <code>0</code> 
  <temperature>-2</temperature> 
  <winddirection>Sud-Ouest</winddirection> 
  <windforce>6</windforce> 
  </hour>
- <hour value="12:00">
  <weather>Ensoleillé</weather> 
  <code>0</code> 
  <temperature>2</temperature> 
  <winddirection>Sud</winddirection> 
  <windforce>12</windforce> 
  </hour>
- <hour value="18:00">
  <weather>Ensoleillé</weather> 
  <code>0</code> 
  <temperature>3</temperature> 
  <winddirection>Sud</winddirection> 
  <windforce>20</windforce> 
  </hour>
  </day>
En gros j'arrive à extraire toutes les données jusqu'à la ligne
<windforce>6</windforce>
Mais je n'arrive pas à continuer l'extraction apres le noeud suivant c'est à dire: <hour value="12:00">

Pour résumer je n'arrive pas (je ne connais pas les commandes) à extraire les diffénrents block (sauf le premier block) en dessous des balises indiquant l'heure.

Je vous link mon programme pour vous montrer un peu ou j'en suis

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <DOS.H>
#include <iostream>
#include <stdio>
#include <stdlib>
#include "tinyxml.h"
#include "define.h"
 
int  idSemaphoreAlloc ;
int  idSemaphoreFichier ;
 
//*********************** Classe Meteo *********************************
 
//création d'une classe météo permettant de récupérer les données de 3 champs
//du fichier XML (localization, day, hour)
class meteo
{
public:
const char* localization;
const char* day;
const char* hour;
};
 
//************************* MAIN ***********************************
 
int main(void)
{
 
	//Séléction du fichier XML dont il faudra extraire les données
	TiXmlDocument doc("rill.xml");
 
	//Erreur lors de la recherhce du fichier XML
	if(!doc.LoadFile())
	{
		cerr << "erreur lors du chargement" << endl;
		cerr << "error #" << doc.ErrorId() << " : " << doc.ErrorDesc() << endl;
		return 1;
	}
 
   //Création d'un objet de type TiXmlHandle avec en paramètre doc qui permettra
   //par la suite la récupération des informations entre les balises
	TiXmlHandle hdl(&doc);
 
  //création de elem qui permettra de récupérer les informations du fichier XML en fonction de la balise choisie
  TiXmlElement *ele = hdl.FirstChildElement("forecast").FirstChildElement("localization").Element();
  TiXmlElement *ele1 = hdl.FirstChildElement("forecast").FirstChildElement("localization").FirstChildElement("day").Element();
  TiXmlElement *ele2 = hdl.FirstChildElement("forecast").FirstChildElement("localization").FirstChildElement("day").FirstChildElement("hour").Element();
  TiXmlElement* elem = hdl.FirstChildElement("forecast").FirstChildElement("localization").FirstChildElement("day").FirstChildElement("sunrise").Element();
  TiXmlElement* elem2 = hdl.FirstChildElement("forecast").FirstChildElement("localization").FirstChildElement("day").FirstChildElement("hour").FirstChildElement("weather").Element();
 
  //boucle pour vérifier que l'élément ait bien un enfant
  if(!elem)
  cout<<"l'element n'a pas enfant"<<endl;
 
  //création d'un objet cl de la classe meteo
  meteo cl;
 
  //sleep pour permettre un bon affichage des données sur telnet
  sleep(1);
  cout<<endl;
 
  //Récupération de la valeur du champ "localization"
  cl.localization = ele->Attribute("value");
  cout<<"localization:"<<cl.localization<<endl;
 
  //boucle permettant de récupérer la valeur du champ "day"
  while(ele1)
  {
  cl.day = ele1->Attribute("value");
  cout<<"day:"<<cl.day<<endl;
 
  //boucle permettant de récupérer la valeur du champ "sunrise" et "sunset"
  while(elem)
  {
  	if(elem->GetText())  				//n'affiche pas le nom des balises des champs vides
   cout << elem->Value() 				// Recupere le nom de la balise
   <<":"<< elem->GetText() << endl;	// Recupere le texte entre les balises
   elem=elem->NextSiblingElement(); //on passe a l'enfant suivant
  }
 
  //boucle permettant de récupérer la valeur du champ "hour"
  while(ele2)
  {
  cl.hour = ele2->Attribute("value");
  cout<<"hour:"<<cl.hour<<endl;
  ele2=ele2->NextSiblingElement();
 
  //boucle permettant de récupérer la valeur du champ "weather" à "windforce"
  while(elem2)
  {
   cout << elem2->Value() <<":"<< elem2->GetText() << endl;
   elem2=elem2->NextSiblingElement();
  }//fin boucle elem2
  }//fin boucle ele2
   ele1=ele1->NextSiblingElement();
  }//fin boucle ele1
 
}//fin du programme