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 __spxmlnode_hpp__
hlipka 0:3fa97f2c0505 8 #define __spxmlnode_hpp__
hlipka 0:3fa97f2c0505 9
hlipka 0:3fa97f2c0505 10 class SP_XmlArrayList;
hlipka 0:3fa97f2c0505 11
hlipka 0:3fa97f2c0505 12 class SP_XmlNode {
hlipka 0:3fa97f2c0505 13 public:
hlipka 0:3fa97f2c0505 14 enum { eXMLDOC, eDOCDECL, ePI, eDOCTYPE, eELEMENT, eCDATA, eCOMMENT };
hlipka 0:3fa97f2c0505 15
hlipka 0:3fa97f2c0505 16 SP_XmlNode( int type );
hlipka 0:3fa97f2c0505 17 virtual ~SP_XmlNode();
hlipka 0:3fa97f2c0505 18
hlipka 0:3fa97f2c0505 19 void setParent( SP_XmlNode * parent );
hlipka 0:3fa97f2c0505 20 const SP_XmlNode * getParent() const;
hlipka 0:3fa97f2c0505 21 int getType() const;
hlipka 0:3fa97f2c0505 22
hlipka 0:3fa97f2c0505 23 protected:
hlipka 0:3fa97f2c0505 24 SP_XmlNode( SP_XmlNode & );
hlipka 0:3fa97f2c0505 25 SP_XmlNode & operator=( SP_XmlNode & );
hlipka 0:3fa97f2c0505 26
hlipka 0:3fa97f2c0505 27 private:
hlipka 0:3fa97f2c0505 28 SP_XmlNode * mParent;
hlipka 0:3fa97f2c0505 29 const int mType;
hlipka 0:3fa97f2c0505 30 };
hlipka 0:3fa97f2c0505 31
hlipka 0:3fa97f2c0505 32 class SP_XmlNodeList {
hlipka 0:3fa97f2c0505 33 public:
hlipka 0:3fa97f2c0505 34 SP_XmlNodeList();
hlipka 0:3fa97f2c0505 35 ~SP_XmlNodeList();
hlipka 0:3fa97f2c0505 36
hlipka 0:3fa97f2c0505 37 int getLength() const;
hlipka 0:3fa97f2c0505 38 void append( SP_XmlNode * node );
hlipka 0:3fa97f2c0505 39 SP_XmlNode * get( int index ) const;
hlipka 0:3fa97f2c0505 40 SP_XmlNode * take( int index ) const;
hlipka 0:3fa97f2c0505 41
hlipka 0:3fa97f2c0505 42 private:
hlipka 0:3fa97f2c0505 43 SP_XmlNodeList( SP_XmlNodeList & );
hlipka 0:3fa97f2c0505 44 SP_XmlNodeList & operator=( SP_XmlNodeList & );
hlipka 0:3fa97f2c0505 45
hlipka 0:3fa97f2c0505 46 SP_XmlArrayList * mList;
hlipka 0:3fa97f2c0505 47 };
hlipka 0:3fa97f2c0505 48
hlipka 0:3fa97f2c0505 49 class SP_XmlPIEvent;
hlipka 0:3fa97f2c0505 50 class SP_XmlDocDeclEvent;
hlipka 0:3fa97f2c0505 51 class SP_XmlDocTypeEvent;
hlipka 0:3fa97f2c0505 52 class SP_XmlStartTagEvent;
hlipka 0:3fa97f2c0505 53 class SP_XmlCDataEvent;
hlipka 0:3fa97f2c0505 54 class SP_XmlCommentEvent;
hlipka 0:3fa97f2c0505 55
hlipka 0:3fa97f2c0505 56 class SP_XmlElementNode;
hlipka 0:3fa97f2c0505 57 class SP_XmlDocDeclNode;
hlipka 0:3fa97f2c0505 58 class SP_XmlDocTypeNode;
hlipka 0:3fa97f2c0505 59
hlipka 0:3fa97f2c0505 60 class SP_XmlDocument : public SP_XmlNode {
hlipka 0:3fa97f2c0505 61 public:
hlipka 0:3fa97f2c0505 62 SP_XmlDocument();
hlipka 0:3fa97f2c0505 63 virtual ~SP_XmlDocument();
hlipka 0:3fa97f2c0505 64
hlipka 0:3fa97f2c0505 65 void setDocDecl( SP_XmlDocDeclNode * docDecl );
hlipka 0:3fa97f2c0505 66 SP_XmlDocDeclNode * getDocDecl() const;
hlipka 0:3fa97f2c0505 67 void setDocType( SP_XmlDocTypeNode * docType );
hlipka 0:3fa97f2c0505 68 SP_XmlDocTypeNode * getDocType() const;
hlipka 0:3fa97f2c0505 69 void setRootElement( SP_XmlElementNode * rootElement );
hlipka 0:3fa97f2c0505 70 SP_XmlElementNode * getRootElement() const;
hlipka 0:3fa97f2c0505 71 SP_XmlNodeList * getChildren() const;
hlipka 0:3fa97f2c0505 72
hlipka 0:3fa97f2c0505 73 private:
hlipka 0:3fa97f2c0505 74 SP_XmlDocDeclNode * mDocDecl;
hlipka 0:3fa97f2c0505 75 SP_XmlDocTypeNode * mDocType;
hlipka 0:3fa97f2c0505 76 SP_XmlNodeList * mChildren;
hlipka 0:3fa97f2c0505 77 };
hlipka 0:3fa97f2c0505 78
hlipka 0:3fa97f2c0505 79 class SP_XmlPINode : public SP_XmlNode {
hlipka 0:3fa97f2c0505 80 public:
hlipka 0:3fa97f2c0505 81 SP_XmlPINode();
hlipka 0:3fa97f2c0505 82 SP_XmlPINode( SP_XmlPIEvent * event );
hlipka 0:3fa97f2c0505 83 virtual ~SP_XmlPINode();
hlipka 0:3fa97f2c0505 84
hlipka 0:3fa97f2c0505 85 void setTarget( const char * target );
hlipka 0:3fa97f2c0505 86 const char * getTarget();
hlipka 0:3fa97f2c0505 87
hlipka 0:3fa97f2c0505 88 void setData( const char * data );
hlipka 0:3fa97f2c0505 89 const char * getData();
hlipka 0:3fa97f2c0505 90
hlipka 0:3fa97f2c0505 91 private:
hlipka 0:3fa97f2c0505 92 SP_XmlPIEvent * mEvent;
hlipka 0:3fa97f2c0505 93 };
hlipka 0:3fa97f2c0505 94
hlipka 0:3fa97f2c0505 95 class SP_XmlDocDeclNode : public SP_XmlNode {
hlipka 0:3fa97f2c0505 96 public:
hlipka 0:3fa97f2c0505 97 SP_XmlDocDeclNode();
hlipka 0:3fa97f2c0505 98 SP_XmlDocDeclNode( SP_XmlDocDeclEvent * event );
hlipka 0:3fa97f2c0505 99 virtual ~SP_XmlDocDeclNode();
hlipka 0:3fa97f2c0505 100
hlipka 0:3fa97f2c0505 101 void setVersion( const char * version );
hlipka 0:3fa97f2c0505 102 const char * getVersion() const;
hlipka 0:3fa97f2c0505 103 void setEncoding( const char * encoding );
hlipka 0:3fa97f2c0505 104 const char * getEncoding() const;
hlipka 0:3fa97f2c0505 105 void setStandalone( int standalone );
hlipka 0:3fa97f2c0505 106 int getStandalone() const;
hlipka 0:3fa97f2c0505 107
hlipka 0:3fa97f2c0505 108 private:
hlipka 0:3fa97f2c0505 109 SP_XmlDocDeclEvent * mEvent;
hlipka 0:3fa97f2c0505 110 };
hlipka 0:3fa97f2c0505 111
hlipka 0:3fa97f2c0505 112 class SP_XmlDocTypeNode : public SP_XmlNode {
hlipka 0:3fa97f2c0505 113 public:
hlipka 0:3fa97f2c0505 114 SP_XmlDocTypeNode();
hlipka 0:3fa97f2c0505 115 SP_XmlDocTypeNode( SP_XmlDocTypeEvent * event );
hlipka 0:3fa97f2c0505 116 virtual ~SP_XmlDocTypeNode();
hlipka 0:3fa97f2c0505 117
hlipka 0:3fa97f2c0505 118 void setName( const char * name );
hlipka 0:3fa97f2c0505 119 const char * getName() const;
hlipka 0:3fa97f2c0505 120 void setSystemID( const char * systemID );
hlipka 0:3fa97f2c0505 121 const char * getSystemID() const;
hlipka 0:3fa97f2c0505 122 void setPublicID( const char * publicID );
hlipka 0:3fa97f2c0505 123 const char * getPublicID() const;
hlipka 0:3fa97f2c0505 124 void setDTD( const char * dtd );
hlipka 0:3fa97f2c0505 125 const char * getDTD() const;
hlipka 0:3fa97f2c0505 126
hlipka 0:3fa97f2c0505 127 private:
hlipka 0:3fa97f2c0505 128 SP_XmlDocTypeEvent * mEvent;
hlipka 0:3fa97f2c0505 129 };
hlipka 0:3fa97f2c0505 130
hlipka 0:3fa97f2c0505 131 class SP_XmlElementNode : public SP_XmlNode {
hlipka 0:3fa97f2c0505 132 public:
hlipka 0:3fa97f2c0505 133 SP_XmlElementNode();
hlipka 0:3fa97f2c0505 134 SP_XmlElementNode( SP_XmlStartTagEvent * event );
hlipka 0:3fa97f2c0505 135 virtual ~SP_XmlElementNode();
hlipka 0:3fa97f2c0505 136
hlipka 0:3fa97f2c0505 137 void setName( const char * name );
hlipka 0:3fa97f2c0505 138 const char * getName() const;
hlipka 0:3fa97f2c0505 139 void addChild( SP_XmlNode * node );
hlipka 0:3fa97f2c0505 140 const SP_XmlNodeList * getChildren() const;
hlipka 0:3fa97f2c0505 141
hlipka 0:3fa97f2c0505 142 void addAttr( const char * name, const char * value );
hlipka 0:3fa97f2c0505 143 const char * getAttrValue( const char * name ) const;
hlipka 0:3fa97f2c0505 144 int getAttrCount() const;
hlipka 0:3fa97f2c0505 145 const char * getAttr( int index, const char ** value ) const;
hlipka 0:3fa97f2c0505 146
hlipka 0:3fa97f2c0505 147 void removeAttr( const char * name );
hlipka 0:3fa97f2c0505 148
hlipka 0:3fa97f2c0505 149 protected:
hlipka 0:3fa97f2c0505 150 SP_XmlStartTagEvent * mEvent;
hlipka 0:3fa97f2c0505 151 SP_XmlNodeList * mChildren;
hlipka 0:3fa97f2c0505 152 };
hlipka 0:3fa97f2c0505 153
hlipka 0:3fa97f2c0505 154 class SP_XmlCDataNode : public SP_XmlNode {
hlipka 0:3fa97f2c0505 155 public:
hlipka 0:3fa97f2c0505 156 SP_XmlCDataNode();
hlipka 0:3fa97f2c0505 157 SP_XmlCDataNode( SP_XmlCDataEvent * event );
hlipka 0:3fa97f2c0505 158 virtual ~SP_XmlCDataNode();
hlipka 0:3fa97f2c0505 159
hlipka 0:3fa97f2c0505 160 void setText( const char * content );
hlipka 0:3fa97f2c0505 161 const char * getText() const;
hlipka 0:3fa97f2c0505 162
hlipka 0:3fa97f2c0505 163 protected:
hlipka 0:3fa97f2c0505 164 SP_XmlCDataEvent * mEvent;
hlipka 0:3fa97f2c0505 165 };
hlipka 0:3fa97f2c0505 166
hlipka 0:3fa97f2c0505 167 class SP_XmlCommentNode : public SP_XmlNode {
hlipka 0:3fa97f2c0505 168 public:
hlipka 0:3fa97f2c0505 169 SP_XmlCommentNode();
hlipka 0:3fa97f2c0505 170 SP_XmlCommentNode( SP_XmlCommentEvent * event );
hlipka 0:3fa97f2c0505 171 virtual ~SP_XmlCommentNode();
hlipka 0:3fa97f2c0505 172
hlipka 0:3fa97f2c0505 173 void setText( const char * comment );
hlipka 0:3fa97f2c0505 174 const char * getText() const;
hlipka 0:3fa97f2c0505 175
hlipka 0:3fa97f2c0505 176 protected:
hlipka 0:3fa97f2c0505 177 SP_XmlCommentEvent * mEvent;
hlipka 0:3fa97f2c0505 178 };
hlipka 0:3fa97f2c0505 179
hlipka 0:3fa97f2c0505 180 #endif
hlipka 0:3fa97f2c0505 181