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: }