00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef BXBINXSAXPARSER_H
00017 #define BXBINXSAXPARSER_H
00018
00019 #include <xercesc/sax2/Attributes.hpp>
00020 #include <xercesc/sax2/DefaultHandler.hpp>
00021
00022 XERCES_CPP_NAMESPACE_USE
00023
00024 #include "BxDataset.h"
00025 #include "BxBinxParser.h"
00026 #include "BxSaxHandler.h"
00027 #include "BxDataObjectStack.h"
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053 class DECLSPEC BxBinxSaxParser : public BxBinxParser, DefaultHandler
00054 {
00055 public:
00056
00057 BxBinxSaxParser();
00058
00059
00060 virtual ~BxBinxSaxParser();
00061
00062
00063 void startDocument();
00064 void endDocument() {}
00065 void startElement(const XMLCh* const, const XMLCh* const localname, const XMLCh* const, const Attributes& attrs);
00066 void endElement(const XMLCh* const, const XMLCh* const localname, const XMLCh* const);
00067 void characters(const XMLCh* const, const unsigned int) {}
00068 void ignorableWhitespace(const XMLCh* const, const unsigned int) {}
00069
00070 void warning(const SAXParseException& exception);
00071 void error(const SAXParseException& exception);
00072 void fatalError(const SAXParseException& exception);
00073 void resetErrors();
00074
00075 virtual char* className() const { return "BxBinxSaxParser"; }
00076
00077 virtual bool parse(const char* xmlFile);
00078
00079 private:
00080
00081
00082
00083
00084 BxBinxSaxParser(const BxBinxSaxParser&);
00085
00086
00087 void operator=(const BxBinxSaxParser&);
00088
00089 bool parseFile(const char*);
00090
00091 void parseXmlStart(const char*, const Attributes&);
00092 void parseBinxStart(const char*, const Attributes&);
00093 void parseDefinitionsStart(const char*, const Attributes&);
00094 void parseParametersStart(const char*, const Attributes&);
00095 void parseDatasetStart(const char*, const Attributes&);
00096 void parseArrayStart(const char*, const Attributes&);
00097 void parseUnionStart(const char*, const Attributes&);
00098
00099 void parseXmlEnd(const char*);
00100 void parseBinxEnd(const char*);
00101 void parseDefinitionsEnd(const char*);
00102 void parseParametersEnd(const char*);
00103 void parseDatasetEnd(const char*);
00104 void parseArrayEnd(const char*);
00105 void parseUnionEnd(const char*);
00106
00107 void parseCommonAttributes(const Attributes&, BxDataObject*);
00108 void parseStringAttributes(const Attributes&, BxDataObject*);
00109 void parseStructAttributes(const Attributes&, BxDataObject*);
00110 void dispatchDataObject();
00111 BxDataObject* createPrimitiveDataObject(const char*);
00112 char* getAttribute(const Attributes&, const char*);
00113
00114 BxByteOrder makeByteOrder(char*);
00115
00116
00117
00118
00119 BxSaxHandler* pSaxHandler_;
00120 char* sDiscriminantValue_;
00121 char* typeName_;
00122 bool errors_;
00123 bool unknownElement_;
00124 int descendants_;
00125 PointerStack stack_;
00126 BxByteOrder bo_;
00127
00128 void (BxBinxSaxParser::*parseStart)(const char*, const Attributes&);
00129 void (BxBinxSaxParser::*parseEnd)(const char*);
00130 };
00131
00132 #endif