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