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 spxmlstag.hpp Source File

spxmlstag.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 __spxmlstag_hpp__
00008 #define __spxmlstag_hpp__
00009 
00010 class SP_XmlSTagReader;
00011 class SP_XmlStartTagEvent;
00012 class SP_XmlStringBuffer;
00013 
00014 class SP_XmlSTagParser {
00015 public:
00016     SP_XmlSTagParser( const char * encoding );
00017     ~SP_XmlSTagParser();
00018 
00019     void append( const char * source, int len );
00020 
00021     SP_XmlStartTagEvent * takeEvent();
00022     const char * getError();
00023 
00024     const char * getEncoding();
00025 
00026 protected:
00027     void changeReader( SP_XmlSTagReader * reader );
00028     void setError( const char * error );
00029 
00030     SP_XmlStartTagEvent * mEvent;
00031 
00032     SP_XmlStringBuffer * mStartTagName;
00033 
00034     friend class SP_XmlSTagReader;
00035 
00036 private:
00037     SP_XmlSTagReader * mReader;
00038     char * mError;
00039     char mEncoding[ 32 ];
00040 };
00041 
00042 class SP_XmlSTagReader {
00043 public:
00044     SP_XmlSTagReader();
00045     virtual ~SP_XmlSTagReader();
00046     virtual void read( SP_XmlSTagParser * parser, char c ) = 0;
00047 
00048 protected:
00049 
00050     /// help to call parser->xxx
00051     void changeReader( SP_XmlSTagParser * parser, SP_XmlSTagReader * reader );
00052     void setError( SP_XmlSTagParser * parser, const char * error );
00053 
00054     /// help to call parser->mEvent->xxx
00055     void setName( SP_XmlSTagParser * parser, const char * name );
00056     void addAttrName( SP_XmlSTagParser * parser, const char * name );
00057     void addAttrValue( SP_XmlSTagParser * parser, const char * value );
00058 
00059     SP_XmlStringBuffer * mBuffer;
00060 };
00061 
00062 class SP_XmlSTagNameReader : public SP_XmlSTagReader {
00063 public:
00064     SP_XmlSTagNameReader();
00065     virtual ~SP_XmlSTagNameReader();
00066     virtual void read( SP_XmlSTagParser * parser, char c );
00067 };
00068 
00069 class SP_XmlSTagAttrNameReader : public SP_XmlSTagReader {
00070 public:
00071     SP_XmlSTagAttrNameReader();
00072     virtual ~SP_XmlSTagAttrNameReader();
00073     virtual void read( SP_XmlSTagParser * parser, char c );
00074 
00075 private:
00076     int mWait4Quot;
00077 };
00078 
00079 class SP_XmlSTagEqualMarkReader : public SP_XmlSTagReader {
00080 public:
00081     SP_XmlSTagEqualMarkReader();
00082     virtual ~SP_XmlSTagEqualMarkReader();
00083     virtual void read( SP_XmlSTagParser * parser, char c );
00084 };
00085 
00086 class SP_XmlSTagAttrValueReader : public SP_XmlSTagReader {
00087 public:
00088     SP_XmlSTagAttrValueReader();
00089     virtual ~SP_XmlSTagAttrValueReader();
00090     virtual void read( SP_XmlSTagParser * parser, char c );
00091 
00092 private:
00093     int mHasReadQuot;
00094 };
00095 
00096 #endif
00097