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 #ifndef _EXPATMM_EXPATXMLPARSER_H
00029 #define _EXPATMM_EXPATXMLPARSER_H
00030
00031 #include "expatmm-libdef.h"
00032
00033 #define XML_CHUNK_SIZE 10240
00034
00035 namespace expatmm {
00036 class ExpatXMLParser {
00037 private:
00038
00039 XML_Parser expat_parser;
00040
00041
00042 XML_Char *xml_buffer;
00043 size_t xml_buffer_size;
00044
00045
00046 bool valid_parser;
00047
00048
00049 XML_Status status;
00050 XML_Error last_error;
00051
00052 void register_default_handlers(void);
00053
00054 static XMLCALL void _element_start_handler(void *userData,
00055 const XML_Char *name, const XML_Char **atts);
00056 static XMLCALL void _element_end_handler(void *userData,
00057 const XML_Char *name);
00058 static XMLCALL void _character_data_handler(void *userData,
00059 const XML_Char *s, int len);
00060 static XMLCALL void _processing_instr_handler(void *userData,
00061 const XML_Char *target, const XML_Char *data);
00062 static XMLCALL void _comment_handler(void *userData,
00063 const XML_Char *data);
00064 static XMLCALL void _default_handler(void *userData,
00065 const XML_Char *s, int len);
00066 static XMLCALL void _cdata_start_handler(void *userData);
00067 static XMLCALL void _cdata_end_handler(void *userData);
00068 protected:
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086 virtual XML_Char *getBuffer(void) { return xml_buffer; };
00087 virtual size_t getBlockSize(void) { return xml_buffer_size; };
00088 virtual ssize_t read_block(void);
00089 virtual void setReadiness(bool ready) { valid_parser = ready; };
00090 virtual void setStatus(XML_Status new_status) { status = new_status; };
00091 virtual void setLastError(XML_Error new_last_error) {
00092 last_error = new_last_error;
00093 };
00094
00095
00096 virtual void StartElement(const XML_Char *name, const XML_Char **atts);
00097 virtual void EndElement(const XML_Char *name);
00098 virtual void CharacterData(const XML_Char *s, int len);
00099 virtual void ProcessingInstruction(const XML_Char *target,
00100 const XML_Char *data);
00101 virtual void CommentData(const XML_Char *data);
00102 virtual void DefaultHandler(const XML_Char *s, int len);
00103 virtual void CDataStart(void);
00104 virtual void CDataEnd(void);
00105
00106 public:
00107
00108
00109 ExpatXMLParser(void);
00110
00111
00112 ExpatXMLParser(size_t chunk_size);
00113
00114
00115 virtual ~ExpatXMLParser(void);
00116
00117
00118 virtual bool Parse(void);
00119
00120
00121 virtual bool Ready(void) { return valid_parser; };
00122 virtual XML_Error getLastError(void) { return last_error; };
00123 virtual XML_Status getStatus(void) { return status; };
00124 };
00125 };
00126
00127 #endif