USGS

Isis 3.0 Object Programmers' Reference

Home

IsisXMLGroups.cpp

Go to the documentation of this file.
00001 
00024 using namespace std;
00025 
00026 #include <string>
00027 
00028 #include <xercesc/util/PlatformUtils.hpp>
00029 #include <xercesc/sax2/SAX2XMLReader.hpp>
00030 #include <xercesc/sax2/Attributes.hpp>
00031 
00032 #include "IsisXMLGroups.h"
00033 #include "IsisXMLChTrans.h"
00034 
00035 namespace XERCES = XERCES_CPP_NAMESPACE;
00036 
00037 
00038 // Constructors
00039 
00040 IsisXMLGroups::IsisXMLGroups(char *PencodingName,
00041                              bool &PexpandNamespaces,
00042                              XERCES::SAX2XMLReader* &Pparser,
00043                              std::vector<IsisGroupData> *Pgroups) {
00044 
00045   encodingName = PencodingName;
00046   expandNamespaces = PexpandNamespaces;
00047   parser = Pparser;
00048   groups = Pgroups;
00049 
00050   prevDocHandler = parser->getContentHandler();
00051   prevErrorHandler = parser->getErrorHandler();
00052 
00053   parser->setContentHandler(this);
00054   parser->setErrorHandler(this);
00055 
00056   groupHandler = NULL;
00057   ignoreHandler = NULL;
00058 }
00059 
00060 IsisXMLGroups::~IsisXMLGroups() {
00061   if(groupHandler != NULL) delete groupHandler;
00062   if(ignoreHandler != NULL) delete ignoreHandler;
00063 }
00064 
00065 
00066 //  IsisXMLGroups: Overrides of the SAX DocumentHandler interface
00067 void IsisXMLGroups::characters(const XMLCh *const chars,
00068                                const XMLSize_t length) {}
00069 
00070 
00071 void IsisXMLGroups::endElement(const XMLCh *const uri,
00072                                const XMLCh *const localname,
00073                                const XMLCh *const qname) {
00074   parser->setContentHandler(prevDocHandler);
00075   parser->setErrorHandler(prevErrorHandler);
00076 }
00077 
00078 
00079 void IsisXMLGroups::startElement(const XMLCh *const uri,
00080                                  const XMLCh *const localname,
00081                                  const XMLCh *const qname,
00082                                  const XERCES::Attributes &attributes) {
00083 
00084   if((string)XERCES::XMLString::transcode(localname) == (string)"group") {
00085     if(groupHandler != NULL) {
00086       delete groupHandler;
00087       groupHandler = NULL;
00088     }
00089     unsigned int index = groups->size();
00090     groups->resize(index + 1);
00091     (*groups)[index].name = XERCES::XMLString::transcode(attributes.getValue((XMLSize_t)0));
00092     groupHandler = new IsisXMLGroup(encodingName, expandNamespaces, parser,
00093                                     &(*groups)[index]);
00094   }
00095   else {
00096     if(ignoreHandler != NULL) {
00097       delete ignoreHandler;
00098       ignoreHandler = NULL;
00099     }
00100     ignoreHandler = new IsisXMLIgnore(encodingName, expandNamespaces, parser,
00101                                       (string)XERCES::XMLString::transcode(localname));
00102   }
00103 
00104 }
00105 
00106 
00107 
00108 
00109 
00110