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@0:3fa97f2c0505, 2010-11-24 (annotated)
- Committer:
- hlipka
- Date:
- Wed Nov 24 20:52:14 2010 +0000
- Revision:
- 0:3fa97f2c0505
initial revision
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hlipka | 0:3fa97f2c0505 | 1 | /* |
hlipka | 0:3fa97f2c0505 | 2 | * Copyright 2007 Stephen Liu |
hlipka | 0:3fa97f2c0505 | 3 | * LGPL, see http://code.google.com/p/spxml/ |
hlipka | 0:3fa97f2c0505 | 4 | * For license terms, see the file COPYING along with this library. |
hlipka | 0:3fa97f2c0505 | 5 | */ |
hlipka | 0:3fa97f2c0505 | 6 | |
hlipka | 0:3fa97f2c0505 | 7 | #ifndef __spxmlreader_hpp__ |
hlipka | 0:3fa97f2c0505 | 8 | #define __spxmlreader_hpp__ |
hlipka | 0:3fa97f2c0505 | 9 | |
hlipka | 0:3fa97f2c0505 | 10 | class SP_XmlPullParser; |
hlipka | 0:3fa97f2c0505 | 11 | class SP_XmlPullEvent; |
hlipka | 0:3fa97f2c0505 | 12 | class SP_XmlStringBuffer; |
hlipka | 0:3fa97f2c0505 | 13 | |
hlipka | 0:3fa97f2c0505 | 14 | class SP_XmlReader { |
hlipka | 0:3fa97f2c0505 | 15 | public: |
hlipka | 0:3fa97f2c0505 | 16 | enum { MAX_READER = 16 }; |
hlipka | 0:3fa97f2c0505 | 17 | enum { ePI, eDocType, eSTag, eETag, ePCData, |
hlipka | 0:3fa97f2c0505 | 18 | eCDataSection, eComment, eLBracket, eSign }; |
hlipka | 0:3fa97f2c0505 | 19 | |
hlipka | 0:3fa97f2c0505 | 20 | /** |
hlipka | 0:3fa97f2c0505 | 21 | * @param parser : act as reader's context |
hlipka | 0:3fa97f2c0505 | 22 | * @param c : a char in xml stream |
hlipka | 0:3fa97f2c0505 | 23 | */ |
hlipka | 0:3fa97f2c0505 | 24 | virtual void read( SP_XmlPullParser * parser, char c ) = 0; |
hlipka | 0:3fa97f2c0505 | 25 | |
hlipka | 0:3fa97f2c0505 | 26 | /** |
hlipka | 0:3fa97f2c0505 | 27 | * reset reader state |
hlipka | 0:3fa97f2c0505 | 28 | */ |
hlipka | 0:3fa97f2c0505 | 29 | virtual void reset(); |
hlipka | 0:3fa97f2c0505 | 30 | |
hlipka | 0:3fa97f2c0505 | 31 | /** |
hlipka | 0:3fa97f2c0505 | 32 | * convert internal xml string to event |
hlipka | 0:3fa97f2c0505 | 33 | * @return NULL : this reader don't generate any event or error occured |
hlipka | 0:3fa97f2c0505 | 34 | */ |
hlipka | 0:3fa97f2c0505 | 35 | virtual SP_XmlPullEvent * getEvent( SP_XmlPullParser * parser ) = 0; |
hlipka | 0:3fa97f2c0505 | 36 | |
hlipka | 0:3fa97f2c0505 | 37 | protected: |
hlipka | 0:3fa97f2c0505 | 38 | SP_XmlStringBuffer * mBuffer; |
hlipka | 0:3fa97f2c0505 | 39 | |
hlipka | 0:3fa97f2c0505 | 40 | friend class SP_XmlReaderPool; |
hlipka | 0:3fa97f2c0505 | 41 | |
hlipka | 0:3fa97f2c0505 | 42 | SP_XmlReader(); |
hlipka | 0:3fa97f2c0505 | 43 | virtual ~SP_XmlReader(); |
hlipka | 0:3fa97f2c0505 | 44 | |
hlipka | 0:3fa97f2c0505 | 45 | /// help to call parser->changeReader |
hlipka | 0:3fa97f2c0505 | 46 | void changeReader( SP_XmlPullParser * parser, SP_XmlReader * reader ); |
hlipka | 0:3fa97f2c0505 | 47 | |
hlipka | 0:3fa97f2c0505 | 48 | /// help to call parser->getReader |
hlipka | 0:3fa97f2c0505 | 49 | SP_XmlReader * getReader( SP_XmlPullParser * parser, int type ); |
hlipka | 0:3fa97f2c0505 | 50 | |
hlipka | 0:3fa97f2c0505 | 51 | /// help to call parser->setError |
hlipka | 0:3fa97f2c0505 | 52 | static void setError( SP_XmlPullParser * parser, const char * error ); |
hlipka | 0:3fa97f2c0505 | 53 | |
hlipka | 0:3fa97f2c0505 | 54 | private: |
hlipka | 0:3fa97f2c0505 | 55 | SP_XmlReader( SP_XmlReader & ); |
hlipka | 0:3fa97f2c0505 | 56 | SP_XmlReader & operator=( SP_XmlReader & ); |
hlipka | 0:3fa97f2c0505 | 57 | }; |
hlipka | 0:3fa97f2c0505 | 58 | |
hlipka | 0:3fa97f2c0505 | 59 | class SP_XmlPIReader : public SP_XmlReader { |
hlipka | 0:3fa97f2c0505 | 60 | public: |
hlipka | 0:3fa97f2c0505 | 61 | SP_XmlPIReader(); |
hlipka | 0:3fa97f2c0505 | 62 | virtual ~SP_XmlPIReader(); |
hlipka | 0:3fa97f2c0505 | 63 | virtual void read( SP_XmlPullParser * parser, char c ); |
hlipka | 0:3fa97f2c0505 | 64 | virtual SP_XmlPullEvent * getEvent( SP_XmlPullParser * parser ); |
hlipka | 0:3fa97f2c0505 | 65 | |
hlipka | 0:3fa97f2c0505 | 66 | private: |
hlipka | 0:3fa97f2c0505 | 67 | static SP_XmlPullEvent * parseDocDeclEvent( SP_XmlPullParser * parser, |
hlipka | 0:3fa97f2c0505 | 68 | SP_XmlStringBuffer * buffer ); |
hlipka | 0:3fa97f2c0505 | 69 | }; |
hlipka | 0:3fa97f2c0505 | 70 | |
hlipka | 0:3fa97f2c0505 | 71 | class SP_XmlStartTagReader : public SP_XmlReader { |
hlipka | 0:3fa97f2c0505 | 72 | public: |
hlipka | 0:3fa97f2c0505 | 73 | SP_XmlStartTagReader(); |
hlipka | 0:3fa97f2c0505 | 74 | virtual ~SP_XmlStartTagReader(); |
hlipka | 0:3fa97f2c0505 | 75 | virtual void read( SP_XmlPullParser * parser, char c ); |
hlipka | 0:3fa97f2c0505 | 76 | virtual SP_XmlPullEvent * getEvent( SP_XmlPullParser * parser ); |
hlipka | 0:3fa97f2c0505 | 77 | virtual void reset(); |
hlipka | 0:3fa97f2c0505 | 78 | |
hlipka | 0:3fa97f2c0505 | 79 | private: |
hlipka | 0:3fa97f2c0505 | 80 | int mIsQuot; |
hlipka | 0:3fa97f2c0505 | 81 | }; |
hlipka | 0:3fa97f2c0505 | 82 | |
hlipka | 0:3fa97f2c0505 | 83 | class SP_XmlEndTagReader : public SP_XmlReader { |
hlipka | 0:3fa97f2c0505 | 84 | public: |
hlipka | 0:3fa97f2c0505 | 85 | SP_XmlEndTagReader(); |
hlipka | 0:3fa97f2c0505 | 86 | virtual ~SP_XmlEndTagReader(); |
hlipka | 0:3fa97f2c0505 | 87 | virtual void read( SP_XmlPullParser * parser, char c ); |
hlipka | 0:3fa97f2c0505 | 88 | virtual SP_XmlPullEvent * getEvent( SP_XmlPullParser * parser ); |
hlipka | 0:3fa97f2c0505 | 89 | }; |
hlipka | 0:3fa97f2c0505 | 90 | |
hlipka | 0:3fa97f2c0505 | 91 | class SP_XmlPCDataReader : public SP_XmlReader { |
hlipka | 0:3fa97f2c0505 | 92 | public: |
hlipka | 0:3fa97f2c0505 | 93 | SP_XmlPCDataReader(); |
hlipka | 0:3fa97f2c0505 | 94 | virtual ~SP_XmlPCDataReader(); |
hlipka | 0:3fa97f2c0505 | 95 | virtual void read( SP_XmlPullParser * parser, char c ); |
hlipka | 0:3fa97f2c0505 | 96 | virtual SP_XmlPullEvent * getEvent( SP_XmlPullParser * parser ); |
hlipka | 0:3fa97f2c0505 | 97 | }; |
hlipka | 0:3fa97f2c0505 | 98 | |
hlipka | 0:3fa97f2c0505 | 99 | class SP_XmlCDataSectionReader : public SP_XmlReader { |
hlipka | 0:3fa97f2c0505 | 100 | public: |
hlipka | 0:3fa97f2c0505 | 101 | SP_XmlCDataSectionReader(); |
hlipka | 0:3fa97f2c0505 | 102 | virtual ~SP_XmlCDataSectionReader(); |
hlipka | 0:3fa97f2c0505 | 103 | virtual void read( SP_XmlPullParser * parser, char c ); |
hlipka | 0:3fa97f2c0505 | 104 | virtual SP_XmlPullEvent * getEvent( SP_XmlPullParser * parser ); |
hlipka | 0:3fa97f2c0505 | 105 | }; |
hlipka | 0:3fa97f2c0505 | 106 | |
hlipka | 0:3fa97f2c0505 | 107 | class SP_XmlCommentReader : public SP_XmlReader { |
hlipka | 0:3fa97f2c0505 | 108 | public: |
hlipka | 0:3fa97f2c0505 | 109 | SP_XmlCommentReader(); |
hlipka | 0:3fa97f2c0505 | 110 | virtual ~SP_XmlCommentReader(); |
hlipka | 0:3fa97f2c0505 | 111 | virtual void read( SP_XmlPullParser * parser, char c ); |
hlipka | 0:3fa97f2c0505 | 112 | virtual SP_XmlPullEvent * getEvent( SP_XmlPullParser * parser ); |
hlipka | 0:3fa97f2c0505 | 113 | }; |
hlipka | 0:3fa97f2c0505 | 114 | |
hlipka | 0:3fa97f2c0505 | 115 | class SP_XmlDocTypeReader : public SP_XmlReader { |
hlipka | 0:3fa97f2c0505 | 116 | public: |
hlipka | 0:3fa97f2c0505 | 117 | SP_XmlDocTypeReader(); |
hlipka | 0:3fa97f2c0505 | 118 | virtual ~SP_XmlDocTypeReader(); |
hlipka | 0:3fa97f2c0505 | 119 | virtual void read( SP_XmlPullParser * parser, char c ); |
hlipka | 0:3fa97f2c0505 | 120 | virtual SP_XmlPullEvent * getEvent( SP_XmlPullParser * parser ); |
hlipka | 0:3fa97f2c0505 | 121 | }; |
hlipka | 0:3fa97f2c0505 | 122 | |
hlipka | 0:3fa97f2c0505 | 123 | class SP_XmlLeftBracketReader : public SP_XmlReader { |
hlipka | 0:3fa97f2c0505 | 124 | public: |
hlipka | 0:3fa97f2c0505 | 125 | SP_XmlLeftBracketReader(); |
hlipka | 0:3fa97f2c0505 | 126 | virtual ~SP_XmlLeftBracketReader(); |
hlipka | 0:3fa97f2c0505 | 127 | virtual void read( SP_XmlPullParser * parser, char c ); |
hlipka | 0:3fa97f2c0505 | 128 | virtual SP_XmlPullEvent * getEvent( SP_XmlPullParser * parser ); |
hlipka | 0:3fa97f2c0505 | 129 | virtual void reset(); |
hlipka | 0:3fa97f2c0505 | 130 | |
hlipka | 0:3fa97f2c0505 | 131 | private: |
hlipka | 0:3fa97f2c0505 | 132 | int mHasReadBracket; |
hlipka | 0:3fa97f2c0505 | 133 | }; |
hlipka | 0:3fa97f2c0505 | 134 | |
hlipka | 0:3fa97f2c0505 | 135 | class SP_XmlSignReader : public SP_XmlReader { |
hlipka | 0:3fa97f2c0505 | 136 | public: |
hlipka | 0:3fa97f2c0505 | 137 | SP_XmlSignReader(); |
hlipka | 0:3fa97f2c0505 | 138 | virtual ~SP_XmlSignReader(); |
hlipka | 0:3fa97f2c0505 | 139 | virtual void read( SP_XmlPullParser * parser, char c ); |
hlipka | 0:3fa97f2c0505 | 140 | virtual SP_XmlPullEvent * getEvent( SP_XmlPullParser * parser ); |
hlipka | 0:3fa97f2c0505 | 141 | }; |
hlipka | 0:3fa97f2c0505 | 142 | |
hlipka | 0:3fa97f2c0505 | 143 | class SP_XmlReaderPool { |
hlipka | 0:3fa97f2c0505 | 144 | public: |
hlipka | 0:3fa97f2c0505 | 145 | SP_XmlReaderPool(); |
hlipka | 0:3fa97f2c0505 | 146 | ~SP_XmlReaderPool(); |
hlipka | 0:3fa97f2c0505 | 147 | SP_XmlReader * borrow( int type ); |
hlipka | 0:3fa97f2c0505 | 148 | void save( SP_XmlReader * reader ); |
hlipka | 0:3fa97f2c0505 | 149 | |
hlipka | 0:3fa97f2c0505 | 150 | private: |
hlipka | 0:3fa97f2c0505 | 151 | SP_XmlReader ** mReaderList; |
hlipka | 0:3fa97f2c0505 | 152 | }; |
hlipka | 0:3fa97f2c0505 | 153 | |
hlipka | 0:3fa97f2c0505 | 154 | #endif |
hlipka | 0:3fa97f2c0505 | 155 |