00001
00032 #ifndef LL_LLXMLPARSER_H
00033 #define LL_LLXMLPARSER_H
00034
00035 #define XML_STATIC
00036 #ifdef LL_STANDALONE
00037 #include <expat.h>
00038 #else
00039 #include "expat/expat.h"
00040 #endif
00041
00042 class LLXmlParser
00043 {
00044 public:
00045 LLXmlParser();
00046 virtual ~LLXmlParser();
00047
00048
00049 BOOL parseFile(const std::string &path);
00050
00051
00052
00053
00054 S32 parse( const char* buf, int len, int isFinal );
00055
00056 const char* getErrorString();
00057
00058 S32 getCurrentLineNumber();
00059
00060 S32 getCurrentColumnNumber();
00061
00062 S32 getDepth() { return mDepth; }
00063
00064 protected:
00065
00066
00067 virtual void startElement(const char *name, const char **atts) {}
00068
00069 virtual void endElement(const char *name) {}
00070
00071
00072 virtual void characterData(const char *s, int len) {}
00073
00074
00075 virtual void processingInstruction(const char *target, const char *data) {}
00076
00077
00078 virtual void comment(const char *data) {}
00079
00080 virtual void startCdataSection() {}
00081
00082 virtual void endCdataSection() {}
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096 virtual void defaultData(const char *s, int len) {}
00097
00098
00099
00100
00101
00102 virtual void unparsedEntityDecl(
00103 const char *entityName,
00104 const char *base,
00105 const char *systemId,
00106 const char *publicId,
00107 const char *notationName) {}
00108
00109 public:
00111
00112
00113 static void startElementHandler(void *userData, const XML_Char *name, const XML_Char **atts);
00114 static void endElementHandler(void *userData, const XML_Char *name);
00115 static void characterDataHandler(void *userData, const XML_Char *s, int len);
00116 static void processingInstructionHandler(void *userData, const XML_Char *target, const XML_Char *data);
00117 static void commentHandler(void *userData, const XML_Char *data);
00118 static void startCdataSectionHandler(void *userData);
00119 static void endCdataSectionHandler(void *userData);
00120 static void defaultDataHandler( void *userData, const XML_Char *s, int len);
00121 static void unparsedEntityDeclHandler(
00122 void *userData,
00123 const XML_Char *entityName,
00124 const XML_Char *base,
00125 const XML_Char *systemId,
00126 const XML_Char *publicId,
00127 const XML_Char *notationName);
00128
00129
00130 protected:
00131 XML_Parser mParser;
00132 int mDepth;
00133 char mAuxErrorString[1024];
00134 };
00135
00136 #endif // LL_LLXMLPARSER_H