/********************************************************************** ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** ** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "xmlreader.h" /*! \class Node xmlreader.h \brief A single element in an XML structure defined by XmlHandler \ingroup qtopiaemb */ Node::Node() : parent( 0 ), prev( 0 ), next( 0 ), first( 0 ), last( 0 ) { } Node::~Node() { Node *n = first, *m; while ( n ) { m = n->next; delete n; n = m; } } void Node::addChild( Node *child ) { child->parent = this; if ( last ) last->next = child; child->prev = last; if ( !first ) first = child; last = child; } QString Node::attribute( const QString& name ) { return attributes[name]; } void Node::setAttributes( const QXmlAttributes &a ) { for ( int i = 0; i < a.length(); i++ ) attributes[ a.qName( i ) ] = a.value( i ); } QMap<QString, QString> Node::attributeMap() { return attributes; } QString Node::subData(const QString& tag) const { Node* c = firstChild(); while ( c ) { if ( c->tagName() == tag ) return c->data(); c = c->nextNode(); } return QString::null; } /*! \class XmlHandler xmlreader.h \brief XML document structure holder This class provides a Node structure that developers can read their xml data into. \ingroup qtopiaemb */ XmlHandler::XmlHandler() : node( 0 ), tree( 0 ) { } XmlHandler::~XmlHandler() { } bool XmlHandler::startDocument() { tree = node = new Node; node->setTagName( "DOCUMENT" ); return TRUE; } bool XmlHandler::endDocument() { if ( node != tree ) return FALSE; return TRUE; } bool XmlHandler::startElement( const QString &, const QString &, const QString &qName, const QXmlAttributes &attr ) { Node *nnode = new Node; nnode->setAttributes( attr ); nnode->setTagName( qName ); node->addChild( nnode ); node = nnode; return TRUE; } bool XmlHandler::endElement( const QString &, const QString &, const QString & ) { if ( node == tree ) return FALSE; node = node->parentNode(); return TRUE; } bool XmlHandler::characters( const QString &ch ) { node->appendData( ch ); return TRUE; }