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

Committer:
hlipka
Date:
Wed Nov 24 20:52:14 2010 +0000
Revision:
0:3fa97f2c0505
initial revision

Who changed what in which revision?

UserRevisionLine numberNew 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