Bonjour les geeks
tout est dans l'intitulé !!! je sais le faire avec dom mais sax ça ce un autre delire !! et comme les objets ont créés avec des clics de souris !!! la méthode sax me semble la plus appropriée .
merci pour la reponse
l'objectif du logiciel ce de faire un creaturelike en polygone mdr
fichier xml de données :
classe metier Centaurien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92 <?xml version="1.0" encoding="UTF-8"?> <root> <centaurien id="0"> <identite nom="adam" sexe="0" age="18" conjoint="eve" gene="1"/> <famille> <parents pere="*" mere="*"/> <enfants> <enfant id="0">theodore</enfant> <enfant id="1">lima</enfant> <enfant id="2">zerdu</enfant> </enfants> </famille> </centaurien> <centaurien id="1"> <identite nom="eve" sexe="2" age="17" conjoint="adam" gene="1"/> <famille> <parents pere="*" mere="*"/> <enfants> <enfant id="0">theodore</enfant> <enfant id="1">lima</enfant> <enfant id="2">zerdu</enfant> </enfants> </famille> </centaurien> <centaurien id="2"> <identite nom="buddha" sexe="0" age="18" conjoint="shiva" gene="1"/> <famille> <parents pere="*" mere="*"/> <enfants> <enfant id="0">maria</enfant> <enfant id="1">lima</enfant> <enfant id="2">zerdu</enfant> </enfants> </famille> </centaurien> <centaurien id="3"> <identite nom="shiva" sexe="1" age="17" conjoint="buddha" gene="1"/> <famille> <parents pere="*" mere="*"/> <enfants> <enfant id="0">maria</enfant> <enfant id="1">lima</enfant> <enfant id="2">zerdu</enfant> </enfants> </famille> </centaurien> <centaurien id="4"> <identite nom="desire" sexe="0" age="12" conjoint="diablo" gene="2"/> <famille> <parents pere="seb" mere="lea"/> <enfants> <enfant id="0">nickao</enfant> <enfant id="1">lucy</enfant> <enfant id="2">nigu</enfant> </enfants> </famille> </centaurien> <centaurien id="5"> <identite nom="diablo" sexe="0" age="12" conjoint="desire" gene="2"/> <famille> <parents pere="theodore" mere="maria"/> <enfants> <enfant id="0">nickao</enfant> <enfant id="1">lucy</enfant> <enfant id="2">nigu</enfant> </enfants> </famille> </centaurien> <centaurien id="5"> <identite nom="theodore" sexe="0" age="12" conjoint="maria" gene="2"/> <famille> <parents pere="adam" mere="eve"/> <enfants> <enfant id="0">decibel</enfant> <enfant id="1">diablo</enfant> <enfant id="2">negatif</enfant> </enfants> </famille> </centaurien> <centaurien id="5"> <identite nom="maria" sexe="1" age="12" conjoint="theodore" gene="2"/> <famille> <parents pere="buddha" mere="shiva"/> <enfants> <enfant id="0">decibel</enfant> <enfant id="1">diablo</enfant> <enfant id="2">negatif</enfant> </enfants> </famille> </centaurien> </root>
classe Parser :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 class Centaurien { public: Centaurien(string nom,int n); virtual ~Centaurien(); int choixSexe(int n); string getNom(){return nomCentaurien;} string getChars(); protected: private: string nomCentaurien; string nomConjoints; string nomEnfants; int sexe; int age; int nbreCote; }; Centaurien::Centaurien(string nom,int n) :nomCentaurien(nom),nbreCote(n) { } int Centaurien::choixSexe(int n){ int choix=n%3; switch(choix){ case 0 : cout<<"male : ";return 0;break; case 1 : cout<<"feminin : ";return 1;break; case 2 : cout<<"androgyne : ";return 2;break;} } Centaurien::~Centaurien() { //dtor }
fichier main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 #include <xercesc/sax2/DefaultHandler.hpp> #include <xercesc/sax2/Attributes.hpp> #include <xercesc/util/XMLString.hpp> #include <xercesc/sax2/SAX2XMLReader.hpp> #include <xercesc/sax2/XMLReaderFactory.hpp> #include <string> #include <iostream> using namespace std; using namespace xercesc; class ParserSAX : public DefaultHandler { public: ParserSAX(); void startElement(const XMLCh *const uri,const XMLCh *const localname, const XMLCh *const qname,const Attributes &attrs); void characters(const XMLCh *const chars,const unsigned int length); void fatalError(const SAXParseException&); virtual ~ParserSAX(); protected: private: }; ParserSAX::ParserSAX() { } void ParserSAX::startElement(const XMLCh *const uri,const XMLCh *const localname, const XMLCh *const qname,const Attributes &attrs){ cout<<"--------------------------------------------------"<<endl; char* messUri=XMLString::transcode(uri); char* messLocalName=XMLString::transcode(localname); char* messQName=XMLString::transcode(qname); cout<<"Elem : "<<" LocalName : "<<messLocalName<<endl; XMLString::release(&messUri);XMLString::release(&messLocalName);XMLString::release(&messQName); for(int i=0;i<attrs.getLength();i++){ char* messAttrNom=XMLString::transcode(attrs.getQName(i)); char* messAttrVal=XMLString::transcode(attrs.getValue(i)); cout<<"Attr : "<<messAttrNom<<" : "<<messAttrVal<<endl; XMLString::release(&messAttrNom);XMLString::release(&messAttrVal); } } void ParserSAX::characters(const XMLCh *const chars,const unsigned int length){ char* messChars=XMLString::transcode(chars); cout<<"valeur Element : "<<messChars<<endl;XMLString::release(&messChars); } void ParserSAX::fatalError(const SAXParseException& exception){ char* message = XMLString::transcode(exception.getMessage()); cout << "Fatal Error: " << message << " at line: " << exception.getLineNumber() << endl; } ParserSAX::~ParserSAX() { //dtor }
ps : l'idée ce quand meme de recuperer les données du fichier xml pour les balancer dans opengl avec la classe metier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 #include <SDL/SDL.h> #include <GL/gl.h> #include <GL/glu.h> #include "Centaurien.h" #include <xercesc/sax2/SAX2XMLReader.hpp> #include <xercesc/sax2/XMLReaderFactory.hpp> #include <xercesc/sax2/DefaultHandler.hpp> #include <xercesc/util/XMLString.hpp> #if defined(XERCES_NEW_IOSTREAMS) #include <iostream> #else #include <iostream.h> #endif #include "ParserSAX.h" XERCES_CPP_NAMESPACE_USE int main(int argc, char *argv[]) { try { XMLPlatformUtils::Initialize(); } catch (const XMLException& toCatch) { char* message = XMLString::transcode(toCatch.getMessage()); cout << "Error during initialization! :\n"; cout << "Exception message is: \n" << message << "\n"; XMLString::release(&message); return 1; } char* xmlFile = "famille.xml"; SAX2XMLReader* parser = XMLReaderFactory::createXMLReader(); parser->setFeature(XMLUni::fgSAX2CoreValidation, true); parser->setFeature(XMLUni::fgSAX2CoreNameSpaces, true); // optional ParserSAX* defaultHandler = new ParserSAX(); parser->setContentHandler(defaultHandler); parser->setErrorHandler(defaultHandler); try { parser->parse(xmlFile); } catch (const XMLException& toCatch) { char* message = XMLString::transcode(toCatch.getMessage()); cout << "Exception message is: \n" << message << "\n"; XMLString::release(&message); return -1; } catch (const SAXParseException& toCatch) { char* message = XMLString::transcode(toCatch.getMessage()); cout << "Exception message is: \n" << message << "\n"; XMLString::release(&message); return -1; } catch (...) { cout << "Unexpected Exception \n" ; return -1; } delete parser; delete defaultHandler; return 0; }
ps2 : elle sert à quoi cette classe SAX2XMLReader misà part lire le fichier xml ?
Partager