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

  1. #1
    Futur Membre du Club
    [TinyXML] Problème dans le code donné en exemple dans le tutoriel ?
    Bonjour,
    Je viens de lire le tuto sur tinyxml fait par khayyam (très bien fait d'ailleurs). Mais il y a quelque chose que je ne comprends pas dans le code donné en exemple. Voici le code qui me pose problème :

    Code C++ :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
    int user_mgr::modifier(const string& u, const string& attrib, const string& value){
        bool trouve = false;
        TiXmlHandle hdl(doc);
     
        TiXmlElement *elem = hdl.FirstChildElement().FirstChildElement().Element();
     
        while(elem && !trouve){
            if( string(elem->Attribute("name")) == u){
                trouve = true;
                break;
            }
            elem = elem->NextSiblingElement();
        }
     
        if (!trouve){
            cerr << "client inexistant" << endl;
            return 1;
        }
        else{
            elem->SetAttribute(attrib, value);
            doc->SaveFile(xml_filename);
     
            // mise a jour de la liste
            list<user>::iterator i=user_list.begin();
            while(i!=user_list.end() && i->name!=u){
                if(attrib == "name")
                    i->name=value;
                else if(attrib == "pass")
                    i->pass=value;
                else if(attrib == "droits"){
                    istringstream iss(value);
                    int int_value;
                    iss >> int_value;
                    i->droits=int_value;
                }
                else
                    cerr << "attribut inconnu" << endl;
                i++;
            }
     
            return 0;
        }
    }


    Dans la partie mise à jour de ma liste, si j'ai bien compris on parcourt toute la liste jusqu'à tomber sur l'élément qui a pour nom "u", et pour chaque élément trouvé (tous les éléments qui se trouvent avant "u" dans la liste donc), on met à jour l'attribut avec sa nouvelle valeur à savoir "value". Donc tous les éléments se trouvant avant "u" dans la liste auront la même valeur pour l'attribut donné.
    Y a t'il un bug dans ce bout de code, ou bien est ce quelque chose m'a échappé?

    Merci

  2. #2
    Rédacteur

    Bonsoir,

    En relisant mon code, je me suis posé la même question que toi. En fait chacune des opérations d'ajout/suppression/modification agit sur l'objet tinyxml et sur la liste d'objets "métiers" pour les garder synchronisés. C'est la modification des objets de cette liste qui n'était pas correcte. J'ai modifié le code proposé dans l'article.

    Merci de ta vigilance