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 ());
    }
}