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