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

spxmlnode.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 __spxmlnode_hpp__
00008 #define __spxmlnode_hpp__
00009 
00010 class SP_XmlArrayList;
00011 
00012 class SP_XmlNode {
00013 public:
00014     enum { eXMLDOC, eDOCDECL, ePI, eDOCTYPE, eELEMENT, eCDATA, eCOMMENT  };
00015 
00016     SP_XmlNode( int type );
00017     virtual ~SP_XmlNode();
00018 
00019     void setParent( SP_XmlNode * parent );
00020     const SP_XmlNode * getParent() const;
00021     int getType() const;
00022 
00023 protected:
00024     SP_XmlNode( SP_XmlNode & );
00025     SP_XmlNode & operator=( SP_XmlNode & );
00026 
00027 private:
00028     SP_XmlNode * mParent;
00029     const int mType;
00030 };
00031 
00032 class SP_XmlNodeList {
00033 public:
00034     SP_XmlNodeList();
00035     ~SP_XmlNodeList();
00036 
00037     int getLength() const;
00038     void append( SP_XmlNode * node );
00039     SP_XmlNode * get( int index ) const;
00040     SP_XmlNode * take( int index ) const;
00041 
00042 private:
00043     SP_XmlNodeList( SP_XmlNodeList & );
00044     SP_XmlNodeList & operator=( SP_XmlNodeList & );
00045 
00046     SP_XmlArrayList * mList;
00047 };
00048 
00049 class SP_XmlPIEvent;
00050 class SP_XmlDocDeclEvent;
00051 class SP_XmlDocTypeEvent;
00052 class SP_XmlStartTagEvent;
00053 class SP_XmlCDataEvent;
00054 class SP_XmlCommentEvent;
00055 
00056 class SP_XmlElementNode;
00057 class SP_XmlDocDeclNode;
00058 class SP_XmlDocTypeNode;
00059 
00060 class SP_XmlDocument : public SP_XmlNode {
00061 public:
00062     SP_XmlDocument();
00063     virtual ~SP_XmlDocument();
00064 
00065     void setDocDecl( SP_XmlDocDeclNode * docDecl );
00066     SP_XmlDocDeclNode * getDocDecl() const;
00067     void setDocType( SP_XmlDocTypeNode * docType );
00068     SP_XmlDocTypeNode * getDocType() const;
00069     void setRootElement( SP_XmlElementNode * rootElement );
00070     SP_XmlElementNode * getRootElement() const;
00071     SP_XmlNodeList * getChildren() const;
00072 
00073 private:
00074     SP_XmlDocDeclNode * mDocDecl;
00075     SP_XmlDocTypeNode * mDocType;
00076     SP_XmlNodeList * mChildren;
00077 };
00078 
00079 class SP_XmlPINode : public SP_XmlNode {
00080 public:
00081     SP_XmlPINode();
00082     SP_XmlPINode( SP_XmlPIEvent * event );
00083     virtual ~SP_XmlPINode();
00084 
00085     void setTarget( const char * target );
00086     const char * getTarget();
00087 
00088     void setData( const char * data );
00089     const char * getData();
00090 
00091 private:
00092     SP_XmlPIEvent * mEvent;
00093 };
00094 
00095 class SP_XmlDocDeclNode : public SP_XmlNode {
00096 public:
00097     SP_XmlDocDeclNode();
00098     SP_XmlDocDeclNode( SP_XmlDocDeclEvent * event );
00099     virtual ~SP_XmlDocDeclNode();
00100 
00101     void setVersion( const char * version );
00102     const char * getVersion() const;
00103     void setEncoding( const char * encoding );
00104     const char * getEncoding() const;
00105     void setStandalone( int standalone );
00106     int getStandalone() const;
00107 
00108 private:
00109     SP_XmlDocDeclEvent * mEvent;
00110 };
00111 
00112 class SP_XmlDocTypeNode : public SP_XmlNode {
00113 public:
00114     SP_XmlDocTypeNode();
00115     SP_XmlDocTypeNode( SP_XmlDocTypeEvent * event );
00116     virtual ~SP_XmlDocTypeNode();
00117 
00118     void setName( const char * name );
00119     const char * getName() const;
00120     void setSystemID( const char * systemID );
00121     const char * getSystemID() const;
00122     void setPublicID( const char * publicID );
00123     const char * getPublicID() const;
00124     void setDTD( const char * dtd );
00125     const char * getDTD() const;
00126 
00127 private:
00128     SP_XmlDocTypeEvent * mEvent;
00129 };
00130 
00131 class SP_XmlElementNode : public SP_XmlNode {
00132 public:
00133     SP_XmlElementNode();
00134     SP_XmlElementNode( SP_XmlStartTagEvent * event );
00135     virtual ~SP_XmlElementNode();
00136 
00137     void setName( const char * name );
00138     const char * getName() const;
00139     void addChild( SP_XmlNode * node );
00140     const SP_XmlNodeList * getChildren() const;
00141 
00142     void addAttr( const char * name, const char * value );
00143     const char * getAttrValue( const char * name ) const;
00144     int getAttrCount() const;
00145     const char * getAttr( int index, const char ** value ) const;
00146 
00147     void removeAttr( const char * name );
00148 
00149 protected:
00150     SP_XmlStartTagEvent * mEvent;
00151     SP_XmlNodeList * mChildren;
00152 };
00153 
00154 class SP_XmlCDataNode : public SP_XmlNode {
00155 public:
00156     SP_XmlCDataNode();
00157     SP_XmlCDataNode( SP_XmlCDataEvent * event );
00158     virtual ~SP_XmlCDataNode();
00159 
00160     void setText( const char * content );
00161     const char * getText() const;
00162 
00163 protected:
00164     SP_XmlCDataEvent * mEvent;
00165 };
00166 
00167 class SP_XmlCommentNode : public SP_XmlNode {
00168 public:
00169     SP_XmlCommentNode();
00170     SP_XmlCommentNode( SP_XmlCommentEvent * event );
00171     virtual ~SP_XmlCommentNode();
00172 
00173     void setText( const char * comment );
00174     const char * getText() const;
00175 
00176 protected:
00177     SP_XmlCommentEvent * mEvent;
00178 };
00179 
00180 #endif
00181