File: readerXml.cpp - Tab length: 1 2 4 8 - Lines: on off - No wrap: on off


#include "readerXml.hpp"

namespace       Config
{
        /*
        ** Lecture d'un groupe d'attributs au sein d'un fichier XML
        ** parent:      groupe utilis� pour enregistrer les attributs
        ** element:     premier noeud XML appartenant au groupe
        ** retour:      false en cas d'erreur dans le fichier, true sinon
        */

        bool                    ReaderXml::loadFromFile (Group& parent, TiXmlElement* element)
        {
                Group*          group;
                const char*     data;
                const char*     name;

                for (; element; element = element->NextSiblingElement ())
                {
                        // Traitement r�cursif d'un sous-groupe
                        if (!strcmp (element->Value (), "group"))
                        {
                                group = new Group ();
                                name = element->Attribute ("name");

                                if (!name)
                                        return false;

                                if (!this->loadFromFile (*group, element->FirstChildElement ()))
                                {
                                        delete group;

                                        return false;
                                }

                                parent.setGroup (name, group);
                        }

                        // Enregistrement d'un attribut simple
                        else if (!strcmp (element->Value (), "item"))
                        {
                                data = element->Attribute ("data");
                                name = element->Attribute ("name");

                                if (!data || !name)
                                        return false;

                                parent.setItem (name, new Item (data));
                        }
                }

                return true;
        }

        /*
        ** Lecture des attributs contenus dans un fichier XML, organis�s selon
        ** une structure de groupes imbriqu�s pouvant chacun contenir des
        ** attributs et des sous-groupes.
        ** path:        chemin d'acc�s complet au fichier XML
        ** retour:      false en cas d'erreur dans le fichier XML, true sinon
        */

        bool                            ReaderXml::loadFromFile (const char* path)
        {
                TiXmlDocument   document;
                TiXmlElement*   element;

                if (!document.LoadFile (path))
                        return false;

                if (!(element = document.RootElement ()))
                        return false;

                return this->loadFromFile (*this, element->FirstChildElement ());
        }
}