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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers spxmlreader.hpp Source File

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