|
Isis 3.0 Object Programmers' Reference |
Home |
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 "IsisXMLGroup.h" 00033 #include "IsisXMLChTrans.h" 00034 00035 #include "IString.h" 00036 00037 namespace XERCES = XERCES_CPP_NAMESPACE; 00038 00039 // Constructors 00040 IsisXMLGroup::IsisXMLGroup(char *PencodingName, 00041 bool &PexpandNamespaces, 00042 XERCES::SAX2XMLReader* &Pparser, 00043 IsisGroupData *Pgroup) { 00044 00045 encodingName = PencodingName; 00046 expandNamespaces = PexpandNamespaces; 00047 parser = Pparser; 00048 group = Pgroup; 00049 00050 prevDocHandler = parser->getContentHandler(); 00051 prevErrorHandler = parser->getErrorHandler(); 00052 00053 parser->setContentHandler(this); 00054 parser->setErrorHandler(this); 00055 00056 parameterHandler = NULL; 00057 ignoreHandler = NULL; 00058 00059 } 00060 00061 IsisXMLGroup::~IsisXMLGroup() { 00062 00063 if(parameterHandler != NULL) delete parameterHandler; 00064 if(ignoreHandler != NULL) delete ignoreHandler; 00065 } 00066 00067 00068 // IsisXMLGroup: Overrides of the SAX DocumentHandler interface 00069 void IsisXMLGroup::characters(const XMLCh *const chars, 00070 const XMLSize_t length) { 00071 } 00072 00073 00074 void IsisXMLGroup::endElement(const XMLCh *const uri, 00075 const XMLCh *const localname, 00076 const XMLCh *const qname) { 00077 parser->setContentHandler(prevDocHandler); 00078 parser->setErrorHandler(prevErrorHandler); 00079 } 00080 00081 void IsisXMLGroup::startElement(const XMLCh *const uri, 00082 const XMLCh *const localname, 00083 const XMLCh *const qname, 00084 const XERCES::Attributes &attributes) { 00085 00086 if((string)XERCES::XMLString::transcode(localname) == (string)"parameter") { 00087 if(parameterHandler != NULL) { 00088 delete parameterHandler; 00089 parameterHandler = NULL; 00090 } 00091 unsigned int index = group->parameters.size(); 00092 group->parameters.resize(index + 1); 00093 QString name = XERCES::XMLString::transcode(attributes.getValue((XMLSize_t)0)); 00094 // Taken out after PVL refactor name.UpCase(); 00095 group->parameters[index].name = name; 00096 parameterHandler = new IsisXMLParameter(encodingName, expandNamespaces, 00097 parser, &group->parameters[index]); 00098 } 00099 else { 00100 if(ignoreHandler != NULL) { 00101 delete ignoreHandler; 00102 ignoreHandler = NULL; 00103 } 00104 ignoreHandler = new IsisXMLIgnore(encodingName, expandNamespaces, parser, 00105 (string)XERCES::XMLString::transcode(localname)); 00106 } 00107 }