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
00001 /* 00002 * Copyright 2008 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 #include <stdio.h> 00008 #include <string.h> 00009 00010 #include "spxmlhandle.hpp" 00011 #include "spxmlnode.hpp" 00012 00013 00014 SP_XmlHandle :: SP_XmlHandle( SP_XmlNode * node ) 00015 { 00016 mNode = node; 00017 } 00018 00019 SP_XmlHandle :: SP_XmlHandle( const SP_XmlHandle & ref ) 00020 { 00021 mNode = ref.mNode; 00022 } 00023 00024 SP_XmlHandle & SP_XmlHandle :: operator=( const SP_XmlHandle & ref ) 00025 { 00026 mNode = ref.mNode; 00027 return *this; 00028 } 00029 00030 SP_XmlHandle :: ~SP_XmlHandle() 00031 { 00032 } 00033 00034 SP_XmlHandle SP_XmlHandle :: getChild( const char * name, int index ) const 00035 { 00036 SP_XmlNode * ret = NULL; 00037 00038 if( NULL != mNode ) { 00039 if( SP_XmlNode::eELEMENT == mNode->getType() ) { 00040 SP_XmlElementNode * element = (SP_XmlElementNode*)mNode; 00041 const SP_XmlNodeList * children = element->getChildren(); 00042 00043 int tmpIndex = index; 00044 for( int i = 0; i < children->getLength(); i++ ) { 00045 if( SP_XmlNode::eELEMENT == children->get(i)->getType() ) { 00046 SP_XmlElementNode * iter = (SP_XmlElementNode*)children->get(i); 00047 if( 0 == strcmp( name, iter->getName() ) ) { 00048 if( 0 == tmpIndex ) { 00049 ret = iter; 00050 break; 00051 } 00052 tmpIndex--; 00053 } 00054 } 00055 } 00056 } 00057 } 00058 00059 return SP_XmlHandle( ret ); 00060 } 00061 00062 SP_XmlHandle SP_XmlHandle :: getChild( int index ) const 00063 { 00064 SP_XmlNode * ret = NULL; 00065 00066 if( NULL != mNode ) { 00067 if( SP_XmlNode::eELEMENT == mNode->getType() ) { 00068 SP_XmlElementNode * element = (SP_XmlElementNode*)mNode; 00069 ret = (SP_XmlNode*)element->getChildren()->get( index ); 00070 } 00071 } 00072 00073 return SP_XmlHandle( ret ); 00074 } 00075 00076 SP_XmlHandle SP_XmlHandle :: getElement( int index ) const 00077 { 00078 SP_XmlNode * ret = NULL; 00079 00080 if( NULL != mNode ) { 00081 if( SP_XmlNode::eELEMENT == mNode->getType() ) { 00082 SP_XmlElementNode * element = (SP_XmlElementNode*)mNode; 00083 const SP_XmlNodeList * children = element->getChildren(); 00084 00085 int tmpIndex = index; 00086 for( int i = 0; i < children->getLength(); i++ ) { 00087 if( SP_XmlNode::eELEMENT == children->get(i)->getType() ) { 00088 SP_XmlElementNode * iter = (SP_XmlElementNode*)children->get(i); 00089 00090 if( 0 == tmpIndex ) { 00091 ret = iter; 00092 break; 00093 } 00094 tmpIndex--; 00095 } 00096 } 00097 } 00098 } 00099 00100 return SP_XmlHandle( ret ); 00101 } 00102 00103 SP_XmlNode * SP_XmlHandle :: toNode() 00104 { 00105 return mNode; 00106 } 00107 00108 SP_XmlElementNode * SP_XmlHandle :: toElement() 00109 { 00110 if( NULL != mNode && SP_XmlNode::eELEMENT == mNode->getType() ) { 00111 return (SP_XmlElementNode*)mNode; 00112 } 00113 00114 return NULL; 00115 } 00116 00117 SP_XmlCDataNode * SP_XmlHandle :: toCData() 00118 { 00119 if( NULL != mNode && SP_XmlNode::eCDATA == mNode->getType() ) { 00120 return (SP_XmlCDataNode*)mNode; 00121 } 00122 00123 return NULL; 00124 } 00125
Generated on Sun Jul 17 2022 09:10:11 by 1.7.2