00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef __XML_PARSER_H__
00035 #define __XML_PARSER_H__
00036
00037 #include <string>
00038 #include <xercesc/dom/DOM.hpp>
00039 #include "ace/OS.h"
00040
00041 #if defined(XERCES_HAS_CPP_NAMESPACE)
00042 using namespace xercesc;
00043 #endif
00044
00045 class PANA_XMLElementParser {
00046 public:
00047 PANA_XMLElementParser(std::string &tagName);
00048 virtual ~PANA_XMLElementParser() { }
00049
00050 virtual int svc(DOMNode *n) = 0;
00051
00052 std::string &name() { return name_; }
00053
00054 int populate(DOMNode *n, DOMNode **found = NULL);
00055
00056 char *getTextContent(DOMNode *n);
00057
00058 protected:
00059 std::string name_;
00060 };
00061
00062 class PANA_XMLTreeParser {
00063 public:
00064 int open(std::string &filename, PANA_XMLElementParser &root);
00065 void close();
00066 };
00067
00068 class PANA_XMLDataString : public PANA_XMLElementParser {
00069 public:
00070 PANA_XMLDataString(std::string &name, std::string &data) :
00071 PANA_XMLElementParser(name),
00072 payload(data) { }
00073
00074 virtual int svc(DOMNode *n);
00075
00076 protected:
00077 std::string &payload;
00078 };
00079
00080 class PANA_XMLDataUInt32 : public PANA_XMLElementParser {
00081 public:
00082 PANA_XMLDataUInt32(std::string &name, ACE_UINT32 &data) :
00083 PANA_XMLElementParser(name),
00084 payload(data) { }
00085
00086 virtual int svc(DOMNode *n);
00087
00088 protected:
00089 ACE_UINT32 &payload;
00090 };
00091
00092 #endif // __XML_PARSER_H__