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