Download NHK English news podcast automatically. XML Parser "spxml" is used. This application requires mpod mother board. See also http://mbed.org/users/geodenx/notebook/mpod/
Dependencies: BlinkLed HTTPClient EthernetInterface FatFileSystemCpp MSCFileSystem spxml mbed-rtos mbed
Fork of mpod_nhk_english by
Download NHK English news podcast automatically.
XML Parser "spxml" is used.
This application requires mpod mother board.
See also http://mbed.org/users/geodenx/notebook/mpod/
Diff: spxml/spdomiterator.cpp
- Revision:
- 8:a9541e8897f5
- Parent:
- 7:ad9fcf0e1bc5
--- a/spxml/spdomiterator.cpp Sat Sep 01 04:09:48 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ -/* - * Copyright 2007 Stephen Liu - * For license terms, see the file COPYING along with this library. - */ - -#include <stdio.h> -#include <stdlib.h> -#include <assert.h> - -#include "spdomiterator.hpp" -#include "spxmlnode.hpp" - -SP_DomIterator :: SP_DomIterator( const SP_XmlNode * node ) -{ - mRoot = node; - mCurrent = node; -} - -SP_DomIterator :: ~SP_DomIterator() -{ -} - -const SP_XmlNode * SP_DomIterator :: getNext() -{ - if( NULL == mCurrent ) return NULL; - - const SP_XmlNode * retNode = mCurrent; - - // find first left child - if( SP_XmlNode::eXMLDOC == mCurrent->getType() ) { - SP_XmlDocument * document = static_cast<SP_XmlDocument*>((SP_XmlNode*)mCurrent); - - mCurrent = NULL; - retNode = document->getDocDecl(); - if( NULL == retNode ) retNode = document->getDocType(); - if( NULL == retNode ) { - retNode = document->getRootElement(); - if( NULL != retNode ) mCurrent = document->getRootElement()->getChildren()->get( 0 ); - } - } else if( SP_XmlNode::eELEMENT == mCurrent->getType() ) { - SP_XmlElementNode * element = static_cast<SP_XmlElementNode*>((SP_XmlNode*)mCurrent); - const SP_XmlNodeList * children = element->getChildren(); - mCurrent = children->get( 0 ); - } else { - mCurrent = NULL; - } - - // find next sibling - if( NULL == mCurrent ) { - mCurrent = retNode; - - const SP_XmlNode * parent = NULL; - if( NULL != mCurrent ) parent = mCurrent->getParent(); - - for( ; NULL != parent; ) { - if( SP_XmlNode::eXMLDOC == parent->getType() ) { - SP_XmlDocument * document = static_cast<SP_XmlDocument*>((SP_XmlNode*)parent); - if( mCurrent == document->getDocDecl() ) { - mCurrent = document->getDocType(); - if( NULL == mCurrent ) mCurrent = document->getRootElement(); - } else if( mCurrent == document->getDocType() ) { - mCurrent = document->getRootElement(); - } else { - mCurrent = NULL; - } - } else if( SP_XmlNode::eELEMENT == parent->getType() ) { - SP_XmlElementNode * element = static_cast<SP_XmlElementNode*>((SP_XmlNode*)parent); - const SP_XmlNodeList * children = element->getChildren(); - - int index = -1; - for( int i = 0; i < children->getLength(); i++ ) { - if( mCurrent == children->get( i ) ) { - index = i; - break; - } - } - - if( index >= 0 && index < ( children->getLength() - 1 ) ) { - mCurrent = children->get( index + 1 ); - } else { - mCurrent = NULL; - } - } else { - mCurrent = NULL; - assert( 0 ); // should not occur - } - - if( NULL == mCurrent ) { - mCurrent = parent; - parent = mCurrent->getParent(); - if( NULL == parent ) mCurrent = NULL; - if( mRoot == mCurrent ) mCurrent = NULL; - } else { - break; - } - } - } - - return retNode; -}