00001
00002 #include "XMLInterface/SAX2DefaultHandler.h"
00003 #include <iostream>
00004 #include <xercesc/sax2/DefaultHandler.hpp>
00005 #include <xercesc/sax2/Attributes.hpp>
00006 #include "XMLInterface/ChString.h"
00007 #include "XMLInterface/Attribute.h"
00008 #include "XMLInterface/SAX2Handler.h"
00009
00010
00011 xmli::SAX2DefaultHandler::~SAX2DefaultHandler()
00012 {
00013
00014 xmli::SAX2Handler* handler = 0;
00015
00016 if (fHandler.empty()==false) {
00017 for (handler = fHandler.top(); handler!=0; fHandler.pop()) {
00018 std::cerr << "xmli::SAX2DefaultHandler::" << __LINE__
00019 << " Unterminated tag." << std::endl;
00020 delete handler;
00021 }
00022 }
00023 }
00024
00025
00026
00027 void xmli::SAX2DefaultHandler::startElement(const XMLCh* const uri,
00028 const XMLCh* const localname,
00029 const XMLCh* const qname,
00030 const Attributes& attributes)
00031 {
00032 xmli::ChString uris(uri);
00033 xmli::ChString localnames(localname);
00034 xmli::ChString qnames(qname);
00035
00036 xmli::AttributeList attr;
00037 for (unsigned int i=0; i<attributes.getLength(); ++i) {
00038 xmli::ChString names = attributes.getLocalName(i);
00039 xmli::ChString values = attributes.getValue(i);
00040 xmli::Attribute a(names,values);
00041 attr.push_back(a);
00042 }
00043
00044 xmli::SAX2Handler* handler = new xmli::SAX2Handler();
00045 if (handler) {
00046 handler->StartElement(uris,localnames,qnames,attr);
00047 }
00048 fHandler.push(handler);
00049 }
00050
00051
00052
00053 void xmli::SAX2DefaultHandler::endElement(const XMLCh* const uri,
00054 const XMLCh* const localname,
00055 const XMLCh* const qname)
00056 {
00057 xmli::ChString uris(uri);
00058 xmli::ChString localnames(localname);
00059 xmli::ChString qnames(qname);
00060
00061 xmli::SAX2Handler* handler = fHandler.top();
00062 if (handler) {
00063 handler->EndElement(uris,localnames,qnames);
00064 delete handler;
00065 }
00066 fHandler.pop();
00067 }
00068
00069
00070
00071 void xmli::SAX2DefaultHandler::characters(const XMLCh* const chars,
00072 const unsigned int )
00073 {
00074 xmli::ChString chs(chars);
00075 xmli::SAX2Handler* handler = fHandler.top();
00076 if (handler) handler->Characters(chs);
00077 }
00078