Bonjour à tous,
Je suis en train de développer un parser XML pour mon application en SAX avec Xerces 3.1 sur Ubuntu. Et je n'arrive pas à parser les attributs de mes tags.
En effet, quand je compile, le compilateur me dit que j'utilise mal l'API. Mais le code qui parcourt la liste d'attribut de chaque tag vient de la doc API !
Voici l'erreur du compilateur :
et voici le header du handler :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 src/MySAXHandler.cpp:16:39: erreur: invalid use of incomplete type struct xercesc_3_1::AttributeList /usr/include/xercesc/sax/DocumentHandler.hpp:29:7: erreur: forward declaration of struct xercesc_3_1::AttributeList
et le code du Handler :
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 #ifndef MYSAXHANDLER_HPP_ #define MYSAXHANDLER_HPP_ #include <xercesc/sax/HandlerBase.hpp> using namespace xercesc; class MySAXHandler : public HandlerBase { public: MySAXHandler(); void startElement(const XMLCh* const, AttributeList&); void fatalError(const SAXParseException&); }; #endif /* MYSAXHANDLER_HPP_ */
Je ne vois pas comment je peux m'en sortir.
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 #include "MySAXHandler.hpp" #include <iostream> using namespace std; MySAXHandler::MySAXHandler() { } void MySAXHandler::startElement(const XMLCh* const name, AttributeList& attributes) { char* message = XMLString::transcode(name); cout << "I saw element: "<< message << endl; XMLString::release(&message); XMLSize_t attributeCount = attributes.getLength(); char* type = NULL; for (XMLSize_t i = 0; i < attributeCount; i++){ type = XMLString::transcode(attributes.getName(i)); cout << "Type: "<< type << endl; } } void MySAXHandler::fatalError(const SAXParseException& exception) { char* message = XMLString::transcode(exception.getMessage()); cout << "Fatal Error: " << message << " at line: " << exception.getLineNumber() << endl; XMLString::release(&message); }
Partager