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] Bonne utilisation avec XML à plusieurs niveaux ?


Sujet :

XML

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Points : 146
    Points
    146
    Par défaut [TinyXML] Bonne utilisation avec XML à plusieurs niveaux ?
    Bonjour

    J'ai un tableau de char comptenant du XML (format connu) que je dois parser.

    J'arrive à optenir des données, les KEYs mais pour avoir des valeurs il faudrait que j'ajoute 7 while pour descendre dans tous les niveaux.

    Y a t'il un autre moyen d'accéder aux valeur ?

    Dans ce tuto il n'y a qu'un petit fichier xml ...
    http://khayyam.developpez.com/articles/cpp/tinyxml/

    Merci

    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
     
     
    char pcDataOut[102400];
    char *debut_tableau = pcDataOut;
    TiXmlDocument *doc_xml = new TiXmlDocument();
    doc_xml->Parse(debut_tableau);
    TiXmlHandle hdl(doc_xml);
    TiXmlElement *elm_nv1 = hdl.FirstChildElement().Element();
     
        while(elm_nv1)
        {
            if (elm_nv1->NoChildren ())
                cout  << "_" <<   elm_nv1->Value() << "::" << elm_nv1->GetText() << endl;
            else
            {
                cout  << "_" <<   elm_nv1->Value() << endl;
            }
            //là je peux rajouter un while pour dans un niveau inférieur
            elm_nv1 = elm_nv1->NextSiblingElement();
        }

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    >> il faudrait que j'ajoute 7 while pour descendre dans tous les niveaux.
    Je comprends cela comme 7 niveaux de profondeur. On est bien d'accord ?

    Sinon, TinyXML construit un arbre DOM. Tu dois donc travailler de manière récursive, et non itérative, comme tu es en train de faire et ce qui effectivement te conduira à beaucoup de code. Il y a un exemple à la fin de ce tutorial http://www.grinninglizard.com/tinyxm...tutorial0.html.

    Sinon, sans passer par la récursivité, tu peux utiliser les helpers de TinyXML comme TiXmlHandle http://www.grinninglizard.com/tinyxm...XmlHandle.html

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Points : 146
    Points
    146
    Par défaut
    Je vais le faire comme ceci :

    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
     
    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 );
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        char *debut_tableau = pcDataOut;
        TiXmlDocument *doc_xml = new TiXmlDocument();
        doc_xml->Parse(debut_tableau);
        TiXmlHandle hdl(doc_xml);
        Parcours( hdl.FirstChildElement().Element() );

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

Discussions similaires

  1. Parcours XML à plusieurs niveaux PHP Xmlreader SimpleXMLElement
    Par gyllom dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 20/10/2013, 14h34
  2. [Flex4] Dataprovider issu de XML à plusieurs niveaux de noeuds
    Par Imadus dans le forum Flex
    Réponses: 4
    Dernier message: 29/11/2010, 17h14
  3. Réponses: 3
    Dernier message: 04/09/2009, 13h22
  4. [JDOM] Fichier XML à plusieurs niveaux
    Par sidneyvba dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 06/11/2007, 15h58
  5. [TinyXML][Debian] utilisation avec g++
    Par Fser dans le forum Bibliothèques
    Réponses: 3
    Dernier message: 20/12/2006, 00h16

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