TinyXML Récupération de valeurs

cs_stan08 Messages postés 4 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 16 avril 2009 - 31 juil. 2006 à 14:41
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?

8 réponses

turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
31 juil. 2006 à 14:54
Salut, essaye
cout<< *doc.FirstChildElement()->FirstChild();

TuRn3r
0
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
31 juil. 2006 à 15:03
 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
0
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
31 juil. 2006 à 15:05
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
0
cs_stan08 Messages postés 4 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 16 avril 2009
31 juil. 2006 à 15:48
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*»
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
31 juil. 2006 à 16:02
Essayde remplacer les




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

par







root->FirstChild().ValueStr();





TuRn3r
0
cs_stan08 Messages postés 4 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 16 avril 2009
31 juil. 2006 à 16:09
ça ne marche pas non plus

erreur: request for member «ValueStr» in «root. TiXmlNode::FirstChild()», which is of non-class type «TiXmlNode*»
0
ouknassima Messages postés 2 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 6 mai 2010
6 mai 2010 à 13:47
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
0
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
6 mai 2010 à 17:25
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
0
Rejoignez-nous