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