IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XML Discussion :

[TinyXML] Récupérer des données d'un XML vers une variable


Sujet :

XML

  1. #1
    Membre régulier Avatar de Froyok
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 83
    Points : 73
    Points
    73
    Par défaut [TinyXML] Récupérer des données d'un XML vers une variable
    Bonjour à tous, premier post sur ce forum pour moi, j'espère ne pas faire de doublons, mais malgré des recherches approfondis sur Devellopez et tinyxml, je ne trouve pas de solutions à mon problème :

    Voici mon code source pour commencer (basé sur un code trouvé sur ce forum, désolé je n'ai plus le nom de l'auteur) :
    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
     
    #include "tinyxml.h"
    #include <iostream>
    #include <string>
     
    using namespace std;
     
     
    void Parcours( TiXmlNode* node, int level = 0 )
    {
        cout << string( level*3, ' ' ) << "[" << node->Value() << "]";
        if ( node->ToElement() )
        {
            TiXmlElement* elem = node->ToElement();
            for ( const TiXmlAttribute* attr = elem->FirstAttribute(); attr; attr = attr->Next() )
                cout << " (" << attr->Name() << "=" << attr->Value() << ")";
        }
        cout << "\n";
     
     
     
        for( TiXmlNode* elem = node->FirstChild(); elem; elem = elem->NextSibling() )
            Parcours( elem, level + 1 );
    }
     
     
     
    int main( int argc, char* argv[] )
    {
        TiXmlDocument doc( argv[1]?argv[1]:"../../data/tests_xml/profil.xml" );
        bool loadOkay = doc.LoadFile();
        if ( !loadOkay ) {
            cerr << "Could not load test file. Error='" << doc.ErrorDesc() << "'. Exiting.\n";
            system("pause");
            return 1;
        }
     
        printf("\n======================\n-Fichier \"profil.xml\"-\n======================\n");
        //Affichage hiérarchisé
        Parcours( doc.RootElement() );
        printf("\n======================\n######################\n======================\n");
     
     
     
    //Autre méthode pour afficher le contenu d'un xml ://
    /*=======================================================================================*/
     
        printf("\n======================\n-Fichier \"profil.xml\"-\n======================\n");
            //Affichage original du fichier
    		doc.Print( stdout );
        printf("\n======================\n######################\n======================\n");
     
    /*=======================================================================================*/
     
    //Normalement il y a un processus ici pour demander l'age à l'utilisateur
    long age_player = 5;
     
    //Ecriture dans le fichier profil.xml
            //Déclaration
    		TiXmlNode* node = 0;
    		TiXmlElement* profilElement = 0;
    		TiXmlElement* ageElement = 0;
     
            //Navigation
    		node = doc.FirstChild( "profil_def" );
    		assert( node );
    		profilElement = node->ToElement();
    		assert( profilElement  );
     
    		node = profilElement->FirstChildElement();
    		assert( node );
    		ageElement = node->ToElement();
    		assert( ageElement  );
     
            //insertion de la valeur de age_player dans la variable value
    		ageElement->SetAttribute( "value", age_player );
     
     
        system("pause");
     
     
    }
    Mon problème est le suivant, je ne connait pas et ne parviens pas à trouver et utiliser une fonction de tinyxml pour transférer (dans mon exemple) l'age du jouer vers une variable après l'avoir récupérer dans un fichier xml (en l'occurrence le fichier profil.xml)

    Fichier "profil.xml"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <profil_def>
        <age value="5" />
        <value2>
            <variable name="8" />
            <froyok>
                <settings set1="180" set2="FROYOK" />
            </froyok>
        </value2>
    </profil_def>
    Donc ma question est la suivante, comment récupérer la valeur de set1 soit ici 180 ? Puis la stocker dans une variable de type long ?

    Notez tout de même que je parviens à écrire dans mon fichier... Mais pas à le lire de façon précise .

    J'ai bien tenté un gettext avec tiny, et un texte entre deux balise, sans succès.
    Merci de votre aide !

  2. #2
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    Bien le bonjour,

    Tout d'abord il va falloir te positionner sur le noeud qui t'intéresse. Dans ton cas c'est le noeud settings de froyok, de value2, de profil_def de root. Tu t'en sors à coups de FirstChild.
    Ensuite Il faut extraire un attribut de ce noeud, et pour ça tu vas utiliser la fonction QueryIntAttribute("set1", &variable).

    Tu trouveras des exemples de parcours sur le tuto consacré à tinyXML

  3. #3
    Membre régulier Avatar de Froyok
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 83
    Points : 73
    Points
    73
    Par défaut
    Query

    Je cherchais un Get dans la doc de Tiny...
    Effectivement, je n'étais pas prêt de trouver !

    Merci encore pour cette réponse khayyam90 !

    Et pour le tutorial, je l'avais pourtant déjà lut et relut (3 fois je crois ^^), je n'avais pas vu la ligne :
    "elem->QueryIntAttribute("indice", &cl.droits);"
    ...

    Encore merci !
    Mais je fais un peu boulet quand même...
    Désolé d'en avoir dérangé pour rien ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Récupérer des données de plusieurs feuilles vers une seule
    Par ikobana dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/12/2014, 21h15
  2. récupérer des données dans un XML depuis un tableur excel
    Par tiber33 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 04/12/2014, 15h19
  3. Récupérer des données de type XML
    Par Baldy dans le forum Langage
    Réponses: 1
    Dernier message: 20/09/2012, 13h37
  4. [TinyXML] Récupérer des données sans nom
    Par Bakura dans le forum XML
    Réponses: 4
    Dernier message: 30/03/2007, 18h59
  5. Récupérer des données dans un .XML
    Par Lootro dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 20/08/2006, 22h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo