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

spxmlnode.hpp

Committer:
hlipka
Date:
2010-11-24
Revision:
0:3fa97f2c0505

File content as of revision 0:3fa97f2c0505:

/*
 * Copyright 2007 Stephen Liu
 * LGPL, see http://code.google.com/p/spxml/
 * For license terms, see the file COPYING along with this library.
 */

#ifndef __spxmlnode_hpp__
#define __spxmlnode_hpp__

class SP_XmlArrayList;

class SP_XmlNode {
public:
    enum { eXMLDOC, eDOCDECL, ePI, eDOCTYPE, eELEMENT, eCDATA, eCOMMENT  };

    SP_XmlNode( int type );
    virtual ~SP_XmlNode();

    void setParent( SP_XmlNode * parent );
    const SP_XmlNode * getParent() const;
    int getType() const;

protected:
    SP_XmlNode( SP_XmlNode & );
    SP_XmlNode & operator=( SP_XmlNode & );

private:
    SP_XmlNode * mParent;
    const int mType;
};

class SP_XmlNodeList {
public:
    SP_XmlNodeList();
    ~SP_XmlNodeList();

    int getLength() const;
    void append( SP_XmlNode * node );
    SP_XmlNode * get( int index ) const;
    SP_XmlNode * take( int index ) const;

private:
    SP_XmlNodeList( SP_XmlNodeList & );
    SP_XmlNodeList & operator=( SP_XmlNodeList & );

    SP_XmlArrayList * mList;
};

class SP_XmlPIEvent;
class SP_XmlDocDeclEvent;
class SP_XmlDocTypeEvent;
class SP_XmlStartTagEvent;
class SP_XmlCDataEvent;
class SP_XmlCommentEvent;

class SP_XmlElementNode;
class SP_XmlDocDeclNode;
class SP_XmlDocTypeNode;

class SP_XmlDocument : public SP_XmlNode {
public:
    SP_XmlDocument();
    virtual ~SP_XmlDocument();

    void setDocDecl( SP_XmlDocDeclNode * docDecl );
    SP_XmlDocDeclNode * getDocDecl() const;
    void setDocType( SP_XmlDocTypeNode * docType );
    SP_XmlDocTypeNode * getDocType() const;
    void setRootElement( SP_XmlElementNode * rootElement );
    SP_XmlElementNode * getRootElement() const;
    SP_XmlNodeList * getChildren() const;

private:
    SP_XmlDocDeclNode * mDocDecl;
    SP_XmlDocTypeNode * mDocType;
    SP_XmlNodeList * mChildren;
};

class SP_XmlPINode : public SP_XmlNode {
public:
    SP_XmlPINode();
    SP_XmlPINode( SP_XmlPIEvent * event );
    virtual ~SP_XmlPINode();

    void setTarget( const char * target );
    const char * getTarget();

    void setData( const char * data );
    const char * getData();

private:
    SP_XmlPIEvent * mEvent;
};

class SP_XmlDocDeclNode : public SP_XmlNode {
public:
    SP_XmlDocDeclNode();
    SP_XmlDocDeclNode( SP_XmlDocDeclEvent * event );
    virtual ~SP_XmlDocDeclNode();

    void setVersion( const char * version );
    const char * getVersion() const;
    void setEncoding( const char * encoding );
    const char * getEncoding() const;
    void setStandalone( int standalone );
    int getStandalone() const;

private:
    SP_XmlDocDeclEvent * mEvent;
};

class SP_XmlDocTypeNode : public SP_XmlNode {
public:
    SP_XmlDocTypeNode();
    SP_XmlDocTypeNode( SP_XmlDocTypeEvent * event );
    virtual ~SP_XmlDocTypeNode();

    void setName( const char * name );
    const char * getName() const;
    void setSystemID( const char * systemID );
    const char * getSystemID() const;
    void setPublicID( const char * publicID );
    const char * getPublicID() const;
    void setDTD( const char * dtd );
    const char * getDTD() const;

private:
    SP_XmlDocTypeEvent * mEvent;
};

class SP_XmlElementNode : public SP_XmlNode {
public:
    SP_XmlElementNode();
    SP_XmlElementNode( SP_XmlStartTagEvent * event );
    virtual ~SP_XmlElementNode();

    void setName( const char * name );
    const char * getName() const;
    void addChild( SP_XmlNode * node );
    const SP_XmlNodeList * getChildren() const;

    void addAttr( const char * name, const char * value );
    const char * getAttrValue( const char * name ) const;
    int getAttrCount() const;
    const char * getAttr( int index, const char ** value ) const;

    void removeAttr( const char * name );

protected:
    SP_XmlStartTagEvent * mEvent;
    SP_XmlNodeList * mChildren;
};

class SP_XmlCDataNode : public SP_XmlNode {
public:
    SP_XmlCDataNode();
    SP_XmlCDataNode( SP_XmlCDataEvent * event );
    virtual ~SP_XmlCDataNode();

    void setText( const char * content );
    const char * getText() const;

protected:
    SP_XmlCDataEvent * mEvent;
};

class SP_XmlCommentNode : public SP_XmlNode {
public:
    SP_XmlCommentNode();
    SP_XmlCommentNode( SP_XmlCommentEvent * event );
    virtual ~SP_XmlCommentNode();

    void setText( const char * comment );
    const char * getText() const;

protected:
    SP_XmlCommentEvent * mEvent;
};

#endif