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 2008 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 #include <stdio.h>
hlipka 0:3fa97f2c0505 8 #include <string.h>
hlipka 0:3fa97f2c0505 9
hlipka 0:3fa97f2c0505 10 #include "spxmlhandle.hpp"
hlipka 0:3fa97f2c0505 11 #include "spxmlnode.hpp"
hlipka 0:3fa97f2c0505 12
hlipka 0:3fa97f2c0505 13
hlipka 0:3fa97f2c0505 14 SP_XmlHandle :: SP_XmlHandle( SP_XmlNode * node )
hlipka 0:3fa97f2c0505 15 {
hlipka 0:3fa97f2c0505 16 mNode = node;
hlipka 0:3fa97f2c0505 17 }
hlipka 0:3fa97f2c0505 18
hlipka 0:3fa97f2c0505 19 SP_XmlHandle :: SP_XmlHandle( const SP_XmlHandle & ref )
hlipka 0:3fa97f2c0505 20 {
hlipka 0:3fa97f2c0505 21 mNode = ref.mNode;
hlipka 0:3fa97f2c0505 22 }
hlipka 0:3fa97f2c0505 23
hlipka 0:3fa97f2c0505 24 SP_XmlHandle & SP_XmlHandle :: operator=( const SP_XmlHandle & ref )
hlipka 0:3fa97f2c0505 25 {
hlipka 0:3fa97f2c0505 26 mNode = ref.mNode;
hlipka 0:3fa97f2c0505 27 return *this;
hlipka 0:3fa97f2c0505 28 }
hlipka 0:3fa97f2c0505 29
hlipka 0:3fa97f2c0505 30 SP_XmlHandle :: ~SP_XmlHandle()
hlipka 0:3fa97f2c0505 31 {
hlipka 0:3fa97f2c0505 32 }
hlipka 0:3fa97f2c0505 33
hlipka 0:3fa97f2c0505 34 SP_XmlHandle SP_XmlHandle :: getChild( const char * name, int index ) const
hlipka 0:3fa97f2c0505 35 {
hlipka 0:3fa97f2c0505 36 SP_XmlNode * ret = NULL;
hlipka 0:3fa97f2c0505 37
hlipka 0:3fa97f2c0505 38 if( NULL != mNode ) {
hlipka 0:3fa97f2c0505 39 if( SP_XmlNode::eELEMENT == mNode->getType() ) {
hlipka 0:3fa97f2c0505 40 SP_XmlElementNode * element = (SP_XmlElementNode*)mNode;
hlipka 0:3fa97f2c0505 41 const SP_XmlNodeList * children = element->getChildren();
hlipka 0:3fa97f2c0505 42
hlipka 0:3fa97f2c0505 43 int tmpIndex = index;
hlipka 0:3fa97f2c0505 44 for( int i = 0; i < children->getLength(); i++ ) {
hlipka 0:3fa97f2c0505 45 if( SP_XmlNode::eELEMENT == children->get(i)->getType() ) {
hlipka 0:3fa97f2c0505 46 SP_XmlElementNode * iter = (SP_XmlElementNode*)children->get(i);
hlipka 0:3fa97f2c0505 47 if( 0 == strcmp( name, iter->getName() ) ) {
hlipka 0:3fa97f2c0505 48 if( 0 == tmpIndex ) {
hlipka 0:3fa97f2c0505 49 ret = iter;
hlipka 0:3fa97f2c0505 50 break;
hlipka 0:3fa97f2c0505 51 }
hlipka 0:3fa97f2c0505 52 tmpIndex--;
hlipka 0:3fa97f2c0505 53 }
hlipka 0:3fa97f2c0505 54 }
hlipka 0:3fa97f2c0505 55 }
hlipka 0:3fa97f2c0505 56 }
hlipka 0:3fa97f2c0505 57 }
hlipka 0:3fa97f2c0505 58
hlipka 0:3fa97f2c0505 59 return SP_XmlHandle( ret );
hlipka 0:3fa97f2c0505 60 }
hlipka 0:3fa97f2c0505 61
hlipka 0:3fa97f2c0505 62 SP_XmlHandle SP_XmlHandle :: getChild( int index ) const
hlipka 0:3fa97f2c0505 63 {
hlipka 0:3fa97f2c0505 64 SP_XmlNode * ret = NULL;
hlipka 0:3fa97f2c0505 65
hlipka 0:3fa97f2c0505 66 if( NULL != mNode ) {
hlipka 0:3fa97f2c0505 67 if( SP_XmlNode::eELEMENT == mNode->getType() ) {
hlipka 0:3fa97f2c0505 68 SP_XmlElementNode * element = (SP_XmlElementNode*)mNode;
hlipka 0:3fa97f2c0505 69 ret = (SP_XmlNode*)element->getChildren()->get( index );
hlipka 0:3fa97f2c0505 70 }
hlipka 0:3fa97f2c0505 71 }
hlipka 0:3fa97f2c0505 72
hlipka 0:3fa97f2c0505 73 return SP_XmlHandle( ret );
hlipka 0:3fa97f2c0505 74 }
hlipka 0:3fa97f2c0505 75
hlipka 0:3fa97f2c0505 76 SP_XmlHandle SP_XmlHandle :: getElement( int index ) const
hlipka 0:3fa97f2c0505 77 {
hlipka 0:3fa97f2c0505 78 SP_XmlNode * ret = NULL;
hlipka 0:3fa97f2c0505 79
hlipka 0:3fa97f2c0505 80 if( NULL != mNode ) {
hlipka 0:3fa97f2c0505 81 if( SP_XmlNode::eELEMENT == mNode->getType() ) {
hlipka 0:3fa97f2c0505 82 SP_XmlElementNode * element = (SP_XmlElementNode*)mNode;
hlipka 0:3fa97f2c0505 83 const SP_XmlNodeList * children = element->getChildren();
hlipka 0:3fa97f2c0505 84
hlipka 0:3fa97f2c0505 85 int tmpIndex = index;
hlipka 0:3fa97f2c0505 86 for( int i = 0; i < children->getLength(); i++ ) {
hlipka 0:3fa97f2c0505 87 if( SP_XmlNode::eELEMENT == children->get(i)->getType() ) {
hlipka 0:3fa97f2c0505 88 SP_XmlElementNode * iter = (SP_XmlElementNode*)children->get(i);
hlipka 0:3fa97f2c0505 89
hlipka 0:3fa97f2c0505 90 if( 0 == tmpIndex ) {
hlipka 0:3fa97f2c0505 91 ret = iter;
hlipka 0:3fa97f2c0505 92 break;
hlipka 0:3fa97f2c0505 93 }
hlipka 0:3fa97f2c0505 94 tmpIndex--;
hlipka 0:3fa97f2c0505 95 }
hlipka 0:3fa97f2c0505 96 }
hlipka 0:3fa97f2c0505 97 }
hlipka 0:3fa97f2c0505 98 }
hlipka 0:3fa97f2c0505 99
hlipka 0:3fa97f2c0505 100 return SP_XmlHandle( ret );
hlipka 0:3fa97f2c0505 101 }
hlipka 0:3fa97f2c0505 102
hlipka 0:3fa97f2c0505 103 SP_XmlNode * SP_XmlHandle :: toNode()
hlipka 0:3fa97f2c0505 104 {
hlipka 0:3fa97f2c0505 105 return mNode;
hlipka 0:3fa97f2c0505 106 }
hlipka 0:3fa97f2c0505 107
hlipka 0:3fa97f2c0505 108 SP_XmlElementNode * SP_XmlHandle :: toElement()
hlipka 0:3fa97f2c0505 109 {
hlipka 0:3fa97f2c0505 110 if( NULL != mNode && SP_XmlNode::eELEMENT == mNode->getType() ) {
hlipka 0:3fa97f2c0505 111 return (SP_XmlElementNode*)mNode;
hlipka 0:3fa97f2c0505 112 }
hlipka 0:3fa97f2c0505 113
hlipka 0:3fa97f2c0505 114 return NULL;
hlipka 0:3fa97f2c0505 115 }
hlipka 0:3fa97f2c0505 116
hlipka 0:3fa97f2c0505 117 SP_XmlCDataNode * SP_XmlHandle :: toCData()
hlipka 0:3fa97f2c0505 118 {
hlipka 0:3fa97f2c0505 119 if( NULL != mNode && SP_XmlNode::eCDATA == mNode->getType() ) {
hlipka 0:3fa97f2c0505 120 return (SP_XmlCDataNode*)mNode;
hlipka 0:3fa97f2c0505 121 }
hlipka 0:3fa97f2c0505 122
hlipka 0:3fa97f2c0505 123 return NULL;
hlipka 0:3fa97f2c0505 124 }
hlipka 0:3fa97f2c0505 125