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