Mbed port of the Simple Plain Xml parser. See http://code.google.com/p/spxml/ for more details. This library uses less memory and is much better suited to streaming data than TinyXML (doesn\'t use as much C++ features, and especially works without streams). See http://mbed.org/users/hlipka/notebook/xml-parsing/ for usage examples.
Dependents: spxmltest_weather VFD_fontx2_weather weather_LCD_display News_LCD_display ... more
spxmlreader.hpp
00001 /* 00002 * Copyright 2007 Stephen Liu 00003 * LGPL, see http://code.google.com/p/spxml/ 00004 * For license terms, see the file COPYING along with this library. 00005 */ 00006 00007 #ifndef __spxmlreader_hpp__ 00008 #define __spxmlreader_hpp__ 00009 00010 class SP_XmlPullParser; 00011 class SP_XmlPullEvent; 00012 class SP_XmlStringBuffer; 00013 00014 class SP_XmlReader { 00015 public: 00016 enum { MAX_READER = 16 }; 00017 enum { ePI, eDocType, eSTag, eETag, ePCData, 00018 eCDataSection, eComment, eLBracket, eSign }; 00019 00020 /** 00021 * @param parser : act as reader's context 00022 * @param c : a char in xml stream 00023 */ 00024 virtual void read( SP_XmlPullParser * parser, char c ) = 0; 00025 00026 /** 00027 * reset reader state 00028 */ 00029 virtual void reset(); 00030 00031 /** 00032 * convert internal xml string to event 00033 * @return NULL : this reader don't generate any event or error occured 00034 */ 00035 virtual SP_XmlPullEvent * getEvent( SP_XmlPullParser * parser ) = 0; 00036 00037 protected: 00038 SP_XmlStringBuffer * mBuffer; 00039 00040 friend class SP_XmlReaderPool; 00041 00042 SP_XmlReader(); 00043 virtual ~SP_XmlReader(); 00044 00045 /// help to call parser->changeReader 00046 void changeReader( SP_XmlPullParser * parser, SP_XmlReader * reader ); 00047 00048 /// help to call parser->getReader 00049 SP_XmlReader * getReader( SP_XmlPullParser * parser, int type ); 00050 00051 /// help to call parser->setError 00052 static void setError( SP_XmlPullParser * parser, const char * error ); 00053 00054 private: 00055 SP_XmlReader( SP_XmlReader & ); 00056 SP_XmlReader & operator=( SP_XmlReader & ); 00057 }; 00058 00059 class SP_XmlPIReader : public SP_XmlReader { 00060 public: 00061 SP_XmlPIReader(); 00062 virtual ~SP_XmlPIReader(); 00063 virtual void read( SP_XmlPullParser * parser, char c ); 00064 virtual SP_XmlPullEvent * getEvent( SP_XmlPullParser * parser ); 00065 00066 private: 00067 static SP_XmlPullEvent * parseDocDeclEvent( SP_XmlPullParser * parser, 00068 SP_XmlStringBuffer * buffer ); 00069 }; 00070 00071 class SP_XmlStartTagReader : public SP_XmlReader { 00072 public: 00073 SP_XmlStartTagReader(); 00074 virtual ~SP_XmlStartTagReader(); 00075 virtual void read( SP_XmlPullParser * parser, char c ); 00076 virtual SP_XmlPullEvent * getEvent( SP_XmlPullParser * parser ); 00077 virtual void reset(); 00078 00079 private: 00080 int mIsQuot; 00081 }; 00082 00083 class SP_XmlEndTagReader : public SP_XmlReader { 00084 public: 00085 SP_XmlEndTagReader(); 00086 virtual ~SP_XmlEndTagReader(); 00087 virtual void read( SP_XmlPullParser * parser, char c ); 00088 virtual SP_XmlPullEvent * getEvent( SP_XmlPullParser * parser ); 00089 }; 00090 00091 class SP_XmlPCDataReader : public SP_XmlReader { 00092 public: 00093 SP_XmlPCDataReader(); 00094 virtual ~SP_XmlPCDataReader(); 00095 virtual void read( SP_XmlPullParser * parser, char c ); 00096 virtual SP_XmlPullEvent * getEvent( SP_XmlPullParser * parser ); 00097 }; 00098 00099 class SP_XmlCDataSectionReader : public SP_XmlReader { 00100 public: 00101 SP_XmlCDataSectionReader(); 00102 virtual ~SP_XmlCDataSectionReader(); 00103 virtual void read( SP_XmlPullParser * parser, char c ); 00104 virtual SP_XmlPullEvent * getEvent( SP_XmlPullParser * parser ); 00105 }; 00106 00107 class SP_XmlCommentReader : public SP_XmlReader { 00108 public: 00109 SP_XmlCommentReader(); 00110 virtual ~SP_XmlCommentReader(); 00111 virtual void read( SP_XmlPullParser * parser, char c ); 00112 virtual SP_XmlPullEvent * getEvent( SP_XmlPullParser * parser ); 00113 }; 00114 00115 class SP_XmlDocTypeReader : public SP_XmlReader { 00116 public: 00117 SP_XmlDocTypeReader(); 00118 virtual ~SP_XmlDocTypeReader(); 00119 virtual void read( SP_XmlPullParser * parser, char c ); 00120 virtual SP_XmlPullEvent * getEvent( SP_XmlPullParser * parser ); 00121 }; 00122 00123 class SP_XmlLeftBracketReader : public SP_XmlReader { 00124 public: 00125 SP_XmlLeftBracketReader(); 00126 virtual ~SP_XmlLeftBracketReader(); 00127 virtual void read( SP_XmlPullParser * parser, char c ); 00128 virtual SP_XmlPullEvent * getEvent( SP_XmlPullParser * parser ); 00129 virtual void reset(); 00130 00131 private: 00132 int mHasReadBracket; 00133 }; 00134 00135 class SP_XmlSignReader : public SP_XmlReader { 00136 public: 00137 SP_XmlSignReader(); 00138 virtual ~SP_XmlSignReader(); 00139 virtual void read( SP_XmlPullParser * parser, char c ); 00140 virtual SP_XmlPullEvent * getEvent( SP_XmlPullParser * parser ); 00141 }; 00142 00143 class SP_XmlReaderPool { 00144 public: 00145 SP_XmlReaderPool(); 00146 ~SP_XmlReaderPool(); 00147 SP_XmlReader * borrow( int type ); 00148 void save( SP_XmlReader * reader ); 00149 00150 private: 00151 SP_XmlReader ** mReaderList; 00152 }; 00153 00154 #endif 00155
Generated on Sun Jul 17 2022 09:10:11 by 1.7.2