File: readerXml.cpp - Tab length: 1 2 4 8 - Lines: on off - No wrap: on off

01: 
02: #include "readerXml.hpp"
03: 
04: namespace   Config
05: {
06:     /*
07:     ** Lecture d'un groupe d'attributs au sein d'un fichier XML
08:     ** parent:  groupe utilis� pour enregistrer les attributs
09:     ** element: premier noeud XML appartenant au groupe
10:     ** retour:  false en cas d'erreur dans le fichier, true sinon
11:     */
12:     bool            ReaderXml::loadFromFile (Group& parent, TiXmlElement* element)
13:     {
14:         Group*      group;
15:         const char* data;
16:         const char* name;
17: 
18:         for (; element; element = element->NextSiblingElement ())
19:         {
20:             // Traitement r�cursif d'un sous-groupe
21:             if (!strcmp (element->Value (), "group"))
22:             {
23:                 group = new Group ();
24:                 name = element->Attribute ("name");
25: 
26:                 if (!name)
27:                     return false;
28: 
29:                 if (!this->loadFromFile (*group, element->FirstChildElement ()))
30:                 {
31:                     delete group;
32: 
33:                     return false;
34:                 }
35: 
36:                 parent.setGroup (name, group);
37:             }
38: 
39:             // Enregistrement d'un attribut simple
40:             else if (!strcmp (element->Value (), "item"))
41:             {
42:                 data = element->Attribute ("data");
43:                 name = element->Attribute ("name");
44: 
45:                 if (!data || !name)
46:                     return false;
47: 
48:                 parent.setItem (name, new Item (data));
49:             }
50:         }
51: 
52:         return true;
53:     }
54: 
55:     /*
56:     ** Lecture des attributs contenus dans un fichier XML, organis�s selon
57:     ** une structure de groupes imbriqu�s pouvant chacun contenir des
58:     ** attributs et des sous-groupes.
59:     ** path:    chemin d'acc�s complet au fichier XML
60:     ** retour:  false en cas d'erreur dans le fichier XML, true sinon
61:     */
62:     bool                ReaderXml::loadFromFile (const char* path)
63:     {
64:         TiXmlDocument   document;
65:         TiXmlElement*   element;
66: 
67:         if (!document.LoadFile (path))
68:             return false;
69: 
70:         if (!(element = document.RootElement ()))
71:             return false;
72: 
73:         return this->loadFromFile (*this, element->FirstChildElement ());
74:     }
75: }