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
spxmlhandle.cpp
- Committer:
- hlipka
- Date:
- 2010-11-24
- Revision:
- 0:3fa97f2c0505
File content as of revision 0:3fa97f2c0505:
/* * Copyright 2008 Stephen Liu * LGPL, see http://code.google.com/p/spxml/ * For license terms, see the file COPYING along with this library. */ #include <stdio.h> #include <string.h> #include "spxmlhandle.hpp" #include "spxmlnode.hpp" SP_XmlHandle :: SP_XmlHandle( SP_XmlNode * node ) { mNode = node; } SP_XmlHandle :: SP_XmlHandle( const SP_XmlHandle & ref ) { mNode = ref.mNode; } SP_XmlHandle & SP_XmlHandle :: operator=( const SP_XmlHandle & ref ) { mNode = ref.mNode; return *this; } SP_XmlHandle :: ~SP_XmlHandle() { } SP_XmlHandle SP_XmlHandle :: getChild( const char * name, int index ) const { SP_XmlNode * ret = NULL; if( NULL != mNode ) { if( SP_XmlNode::eELEMENT == mNode->getType() ) { SP_XmlElementNode * element = (SP_XmlElementNode*)mNode; const SP_XmlNodeList * children = element->getChildren(); int tmpIndex = index; for( int i = 0; i < children->getLength(); i++ ) { if( SP_XmlNode::eELEMENT == children->get(i)->getType() ) { SP_XmlElementNode * iter = (SP_XmlElementNode*)children->get(i); if( 0 == strcmp( name, iter->getName() ) ) { if( 0 == tmpIndex ) { ret = iter; break; } tmpIndex--; } } } } } return SP_XmlHandle( ret ); } SP_XmlHandle SP_XmlHandle :: getChild( int index ) const { SP_XmlNode * ret = NULL; if( NULL != mNode ) { if( SP_XmlNode::eELEMENT == mNode->getType() ) { SP_XmlElementNode * element = (SP_XmlElementNode*)mNode; ret = (SP_XmlNode*)element->getChildren()->get( index ); } } return SP_XmlHandle( ret ); } SP_XmlHandle SP_XmlHandle :: getElement( int index ) const { SP_XmlNode * ret = NULL; if( NULL != mNode ) { if( SP_XmlNode::eELEMENT == mNode->getType() ) { SP_XmlElementNode * element = (SP_XmlElementNode*)mNode; const SP_XmlNodeList * children = element->getChildren(); int tmpIndex = index; for( int i = 0; i < children->getLength(); i++ ) { if( SP_XmlNode::eELEMENT == children->get(i)->getType() ) { SP_XmlElementNode * iter = (SP_XmlElementNode*)children->get(i); if( 0 == tmpIndex ) { ret = iter; break; } tmpIndex--; } } } } return SP_XmlHandle( ret ); } SP_XmlNode * SP_XmlHandle :: toNode() { return mNode; } SP_XmlElementNode * SP_XmlHandle :: toElement() { if( NULL != mNode && SP_XmlNode::eELEMENT == mNode->getType() ) { return (SP_XmlElementNode*)mNode; } return NULL; } SP_XmlCDataNode * SP_XmlHandle :: toCData() { if( NULL != mNode && SP_XmlNode::eCDATA == mNode->getType() ) { return (SP_XmlCDataNode*)mNode; } return NULL; }