USGS

Isis 3.0 Object Programmers' Reference

Home

IsisXMLHelpers.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 "IsisXMLHelpers.h"
00033 #include "IsisXMLChTrans.h"
00034 
00035 namespace XERCES = XERCES_CPP_NAMESPACE;
00036 
00037 
00038 // Constructors
00039 
00040 IsisXMLHelpers::IsisXMLHelpers(char *PencodingName,
00041                                bool &PexpandNamespaces,
00042                                XERCES::SAX2XMLReader* &Pparser,
00043                                std::vector<IsisHelperData> *Phelpers) {
00044 
00045   encodingName = PencodingName;
00046   expandNamespaces = PexpandNamespaces;
00047   parser = Pparser;
00048   helpers = Phelpers;
00049 
00050   prevDocHandler = parser->getContentHandler();
00051   prevErrorHandler = parser->getErrorHandler();
00052 
00053   parser->setContentHandler(this);
00054   parser->setErrorHandler(this);
00055 
00056   helperHandler = NULL;
00057   ignoreHandler = NULL;
00058 }
00059 
00060 IsisXMLHelpers::~IsisXMLHelpers() {
00061   if(helperHandler != NULL) delete helperHandler;
00062   if(ignoreHandler != NULL) delete ignoreHandler;
00063 }
00064 
00065 
00066 //  IsisXMLHelpers: Overrides of the SAX DocumentHandler interface
00067 void IsisXMLHelpers::characters(const XMLCh *const chars,
00068                                 const XMLSize_t length) {}
00069 
00070 
00071 void IsisXMLHelpers::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 IsisXMLHelpers::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)"helper") {
00085     if(helperHandler != NULL) {
00086       delete helperHandler;
00087       helperHandler = NULL;
00088     }
00089     unsigned int index = helpers->size();
00090     helpers->resize(index + 1);
00091     (*helpers)[index].name = XERCES::XMLString::transcode(attributes.getValue((XMLSize_t)0));
00092     helperHandler = new IsisXMLHelper(encodingName, expandNamespaces, parser,
00093                                       &(*helpers)[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