TinyXML Récupération de valeurs

Signaler
Messages postés
4
Date d'inscription
lundi 29 novembre 2004
Statut
Membre
Dernière intervention
16 avril 2009
-
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
-
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?
A voir également:

8 réponses

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

TuRn3r
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
 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
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
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
Messages postés
4
Date d'inscription
lundi 29 novembre 2004
Statut
Membre
Dernière intervention
16 avril 2009

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*»
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
Essayde remplacer les




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

par







root->FirstChild().ValueStr();





TuRn3r
Messages postés
4
Date d'inscription
lundi 29 novembre 2004
Statut
Membre
Dernière intervention
16 avril 2009

ça ne marche pas non plus

erreur: request for member «ValueStr» in «root. TiXmlNode::FirstChild()», which is of non-class type «TiXmlNode*»
Messages postés
2
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
6 mai 2010

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
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
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