TinyXML Récupération de valeurs

Messages postés
4
Date d'inscription
lundi 29 novembre 2004
Statut
Membre
Dernière intervention
16 avril 2009
- - Dernière réponse : turnerom
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
- 6 mai 2010 à 17:25
Bonjour,


Je viens de récupérer la bibliothèque Tinyxml pour parser du xml en
c/c++. J'ai lu un tuto pour l'utiliser mais j'ai un problème pour
récupérer des valeurs dans mon fichier xml.


Voici mon fichier xml:
<!-- BEGIN TEMPLATE: bbcode_code -->

Code :

<liens>
<lien id="a1">up</lien>
<lien id="a2">down</lien>
</liens>

<!-- END TEMPLATE: bbcode_code -->

Je voufrais récupérer 'up' et 'down'


J'ai essayé ceci:

<!-- BEGIN TEMPLATE: bbcode_code -->

Code :

TiXmlDocument doc("lien.xml");
cout<< doc.FirstChildElement()->FirstChild();

<!-- END TEMPLATE: bbcode_code -->
mais ça m'affiche une adresse: 0x8057330


J'ai aussi essayé :
<!-- BEGIN TEMPLATE: bbcode_code -->

Code :

TiXmlDocument doc("lien.xml");
cout<< doc.FirstChildElement()->FirstChildElement()->FirstChild();

<!-- END TEMPLATE: bbcode_code -->

idem.


Quelqu'un peut t'il m'aider?
Afficher la suite 

8 réponses

Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
0
Merci
Salut, essaye
cout<< *doc.FirstChildElement()->FirstChild();

TuRn3r
Commenter la réponse de turnerom
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
0
Merci
 TiXmlDocument doc( "lien.xml" );

  doc.LoadFile(); // Charge ton fichier

 

  TiXmlHandle docHandle( &doc );

  TiXmlNode *root,  *child;

 

  root = docHandle.FirstChild("liens").Node(); // Noeud principal (la balise <liens>)

  child =  docHandle.Node();

 

 

  if ( root && (root->ValueStr() != "liens")) // Si le n



oeud principal !=la balise <liens>





    {

      mess << "Fichier lien.xml non valide";

      throw (mess.str());

    }

 

string val = root->FirstChild()->ValueStr(); //REcuperation du 1er fils (ici up)


child = root->IterateChildren( child ) // Passe a la balise suivante


string val2 = root->FirstChild()->ValueStr();



//REcuperation du 2eme fils (ici down)








Dans val1 tu auras : up


Dans val2, tu auras down


Voila, je pense que c'est un bon depart, mais je te conseil de faire un
truc plus générique, en parcourant tout les noeuds jusqu'à la fin et de
stocker les resultats dans une std::map, comme ca apres pour les
retrouver c'est vraiment plus facile.


@+

TuRn3r
Commenter la réponse de turnerom
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
0
Merci
Enfin, voila, j'ai été un peu vite, cette version devrai mieu marcher :








TiXmlDocument doc( "lien.xml" );
  doc.LoadFile(); // Charge ton fichier
 
  TiXmlHandle docHandle( &doc );
  TiXmlNode *root,  *child;
 
  root = docHandle.FirstChild("liens").Node(); // Noeud principal (la balise <liens>)
  child =  docHandle.Node();
 
 
  if ( root && (root->ValueStr() != "liens")) // Si le n


oeud principal !=la balise <liens>





    {
      mess << "Fichier lien.xml non valide";
      throw (mess.str());
    }
 
string val = root->FirstChild()->ValueStr(); //REcuperation du 1er fils (ici up)

child = root->IterateChildren( child ) // Passe a la balise suivante

string val2 = child->FirstChild()->ValueStr();



//REcuperation du 2eme fils (ici down)








Dans val1 tu auras : up

Dans val2, tu auras down



Voila, je pense que c'est un bon depart, mais je te conseil de faire un
truc plus générique, en parcourant tout les noeuds jusqu'à la fin et de
stocker les resultats dans une std::map, comme ca apres pour les
retrouver c'est vraiment plus facile.


@+


TuRn3r
Commenter la réponse de turnerom
Messages postés
4
Date d'inscription
lundi 29 novembre 2004
Statut
Membre
Dernière intervention
16 avril 2009
0
Merci
Merci de m'aider sur ce coup la mais ça ne marche pas.
J'ai ça comme erreur de compil:

request for member «ValueStr» in «child», which is of non-class type «TiXmlNode*»
Commenter la réponse de cs_stan08
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
0
Merci
Essayde remplacer les




root->FirstChild()->ValueStr();

par







root->FirstChild().ValueStr();





TuRn3r
Commenter la réponse de turnerom
Messages postés
4
Date d'inscription
lundi 29 novembre 2004
Statut
Membre
Dernière intervention
16 avril 2009
0
Merci
ça ne marche pas non plus

erreur: request for member «ValueStr» in «root. TiXmlNode::FirstChild()», which is of non-class type «TiXmlNode*»
Commenter la réponse de cs_stan08
Messages postés
2
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
6 mai 2010
0
Merci
Bonjour,
moi aussi je voudrai travailler avec la librairie tinyxml, mais je la trouve pas , s'il vous plait , vous pourrais me donner le liens où vous avez récupérer la librairie
j'en ai besoin vraiment
Commenter la réponse de ouknassima
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
0
Merci
Après des tests, j'ai laissé tombé tinyXML, rapidxml étant entre autre bien plus performante (jusqu'a 100x plus rapide) : http://rapidxml.sourceforge.net/index.htm



TuRn3r
Commenter la réponse de turnerom