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@0:3fa97f2c0505, 2010-11-24 (annotated)
- Committer:
- hlipka
- Date:
- Wed Nov 24 20:52:14 2010 +0000
- Revision:
- 0:3fa97f2c0505
initial revision
Who changed what in which revision?
User | Revision | Line number | New 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 |