|
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 "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