00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
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
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228 #if !defined(SAXPARSER_HPP)
00229 #define SAXPARSER_HPP
00230
00231 #include <xercesc/sax/Parser.hpp>
00232 #include <xercesc/internal/VecAttrListImpl.hpp>
00233 #include <xercesc/framework/XMLDocumentHandler.hpp>
00234 #include <xercesc/framework/XMLElementDecl.hpp>
00235 #include <xercesc/framework/XMLEntityHandler.hpp>
00236 #include <xercesc/framework/XMLErrorReporter.hpp>
00237 #include <xercesc/framework/XMLBuffer.hpp>
00238 #include <xercesc/util/SecurityManager.hpp>
00239 #include <xercesc/validators/DTD/DocTypeHandler.hpp>
00240
00241 XERCES_CPP_NAMESPACE_BEGIN
00242
00243
00244 class DocumentHandler;
00245 class EntityResolver;
00246 class XMLPScanToken;
00247 class XMLScanner;
00248 class XMLValidator;
00249 class Grammar;
00250 class GrammarResolver;
00251 class XMLGrammarPool;
00252 class XMLEntityResolver;
00253 class XMLResourceIdentifier;
00254 class PSVIHandler;
00255
00270 class SAXParser :
00271
00272 public XMemory
00273 , public Parser
00274 , public XMLDocumentHandler
00275 , public XMLErrorReporter
00276 , public XMLEntityHandler
00277 , public DocTypeHandler
00278 {
00279 public :
00280
00281
00282
00291 enum ValSchemes
00292 {
00293 Val_Never
00294 , Val_Always
00295 , Val_Auto
00296 };
00297
00298
00299
00300
00301
00312 SAXParser
00313 (
00314 XMLValidator* const valToAdopt = 0
00315 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
00316 , XMLGrammarPool* const gramPool = 0
00317 );
00318
00322 ~SAXParser();
00324
00325
00326
00327
00328
00337 DocumentHandler* getDocumentHandler();
00338
00345 const DocumentHandler* getDocumentHandler() const;
00346
00353 EntityResolver* getEntityResolver();
00354
00361 const EntityResolver* getEntityResolver() const;
00362
00369 XMLEntityResolver* getXMLEntityResolver();
00370
00377 const XMLEntityResolver* getXMLEntityResolver() const;
00378
00385 ErrorHandler* getErrorHandler();
00386
00393 const ErrorHandler* getErrorHandler() const;
00394
00401 PSVIHandler* getPSVIHandler();
00402
00409 const PSVIHandler* getPSVIHandler() const;
00410
00417 const XMLValidator& getValidator() const;
00418
00426 ValSchemes getValidationScheme() const;
00427
00438 bool getDoSchema() const;
00439
00450 bool getValidationSchemaFullChecking() const;
00451
00462 bool getIdentityConstraintChecking() const;
00463
00474 int getErrorCount() const;
00475
00485 bool getDoNamespaces() const;
00486
00496 bool getExitOnFirstFatalError() const;
00497
00508 bool getValidationConstraintFatal() const;
00509
00529 XMLCh* getExternalSchemaLocation() const;
00530
00550 XMLCh* getExternalNoNamespaceSchemaLocation() const;
00551
00567 SecurityManager* getSecurityManager() const;
00568
00580 bool getLoadExternalDTD() const;
00581
00592 bool isCachingGrammarFromParse() const;
00593
00604 bool isUsingCachedGrammarInParse() const;
00605
00617 bool getCalculateSrcOfs() const;
00618
00629 bool getStandardUriConformant() const;
00630
00637 Grammar* getGrammar(const XMLCh* const nameSpaceKey);
00638
00644 Grammar* getRootGrammar();
00645
00652 const XMLCh* getURIText(unsigned int uriId) const;
00653
00659 unsigned int getSrcOffset() const;
00660
00672 bool getGenerateSyntheticAnnotations() const;
00673
00681 bool getValidateAnnotations() const;
00682
00684
00685
00686
00687
00688
00689
00702 void setGenerateSyntheticAnnotations(const bool newValue);
00703
00711 void setValidateAnnotations(const bool newValue);
00712
00726 void setDoNamespaces(const bool newState);
00727
00744 void setValidationScheme(const ValSchemes newScheme);
00745
00761 void setDoSchema(const bool newState);
00762
00779 void setValidationSchemaFullChecking(const bool schemaFullChecking);
00780
00792 void setIdentityConstraintChecking(const bool identityConstraintChecking);
00793
00809 void setExitOnFirstFatalError(const bool newState);
00810
00830 void setValidationConstraintFatal(const bool newState);
00831
00852 void setExternalSchemaLocation(const XMLCh* const schemaLocation);
00853
00862 void setExternalSchemaLocation(const char* const schemaLocation);
00863
00878 void setExternalNoNamespaceSchemaLocation(const XMLCh* const noNamespaceSchemaLocation);
00879
00888 void setExternalNoNamespaceSchemaLocation(const char* const noNamespaceSchemaLocation);
00889
00905 void setSecurityManager(SecurityManager* const securityManager);
00906
00923 void setLoadExternalDTD(const bool newState);
00924
00942 void cacheGrammarFromParse(const bool newState);
00943
00962 void useCachedGrammarInParse(const bool newState);
00963
00976 void setCalculateSrcOfs(const bool newState);
00977
00988 void setStandardUriConformant(const bool newState);
00989
00997 void useScanner(const XMLCh* const scannerName);
00998
01009 void setInputBufferSize(const size_t bufferSize);
01010
01012
01013
01014
01015
01016
01017
01033 void installAdvDocHandler(XMLDocumentHandler* const toInstall);
01034
01044 bool removeAdvDocHandler(XMLDocumentHandler* const toRemove);
01046
01047
01048
01049
01050
01051
01054
01082 bool parseFirst
01083 (
01084 const XMLCh* const systemId
01085 , XMLPScanToken& toFill
01086 );
01087
01115 bool parseFirst
01116 (
01117 const char* const systemId
01118 , XMLPScanToken& toFill
01119 );
01120
01148 bool parseFirst
01149 (
01150 const InputSource& source
01151 , XMLPScanToken& toFill
01152 );
01153
01178 bool parseNext(XMLPScanToken& token);
01179
01201 void parseReset(XMLPScanToken& token);
01202
01204
01205
01206
01207
01208
01238 Grammar* loadGrammar(const InputSource& source,
01239 const short grammarType,
01240 const bool toCache = false);
01241
01267 Grammar* loadGrammar(const XMLCh* const systemId,
01268 const short grammarType,
01269 const bool toCache = false);
01270
01295 Grammar* loadGrammar(const char* const systemId,
01296 const short grammarType,
01297 const bool toCache = false);
01298
01302 void resetCachedGrammarPool();
01303
01305
01306
01307
01308
01309
01310
01322 virtual void parse(const InputSource& source);
01323
01333 virtual void parse(const XMLCh* const systemId);
01334
01342 virtual void parse(const char* const systemId);
01343
01354 virtual void setDocumentHandler(DocumentHandler* const handler);
01355
01365 virtual void setDTDHandler(DTDHandler* const handler);
01366
01377 virtual void setErrorHandler(ErrorHandler* const handler);
01378
01389 virtual void setPSVIHandler(PSVIHandler* const handler);
01390
01406 virtual void setEntityResolver(EntityResolver* const resolver);
01407
01423 virtual void setXMLEntityResolver(XMLEntityResolver* const resolver);
01424
01426
01427
01428
01429
01430
01431
01449 virtual void docCharacters
01450 (
01451 const XMLCh* const chars
01452 , const unsigned int length
01453 , const bool cdataSection
01454 );
01455
01465 virtual void docComment
01466 (
01467 const XMLCh* const comment
01468 );
01469
01489 virtual void docPI
01490 (
01491 const XMLCh* const target
01492 , const XMLCh* const data
01493 );
01494
01506 virtual void endDocument();
01507
01527 virtual void endElement
01528 (
01529 const XMLElementDecl& elemDecl
01530 , const unsigned int urlId
01531 , const bool isRoot
01532 , const XMLCh* const elemPrefix
01533 );
01534
01545 virtual void endEntityReference
01546 (
01547 const XMLEntityDecl& entDecl
01548 );
01549
01569 virtual void ignorableWhitespace
01570 (
01571 const XMLCh* const chars
01572 , const unsigned int length
01573 , const bool cdataSection
01574 );
01575
01580 virtual void resetDocument();
01581
01592 virtual void startDocument();
01593
01620 virtual void startElement
01621 (
01622 const XMLElementDecl& elemDecl
01623 , const unsigned int urlId
01624 , const XMLCh* const elemPrefix
01625 , const RefVectorOf<XMLAttr>& attrList
01626 , const unsigned int attrCount
01627 , const bool isEmpty
01628 , const bool isRoot
01629 );
01630
01640 virtual void startEntityReference
01641 (
01642 const XMLEntityDecl& entDecl
01643 );
01644
01662 virtual void XMLDecl
01663 (
01664 const XMLCh* const versionStr
01665 , const XMLCh* const encodingStr
01666 , const XMLCh* const standaloneStr
01667 , const XMLCh* const actualEncodingStr
01668 );
01670
01671
01672
01673
01674
01675
01701 virtual void error
01702 (
01703 const unsigned int errCode
01704 , const XMLCh* const msgDomain
01705 , const XMLErrorReporter::ErrTypes errType
01706 , const XMLCh* const errorText
01707 , const XMLCh* const systemId
01708 , const XMLCh* const publicId
01709 , const XMLSSize_t lineNum
01710 , const XMLSSize_t colNum
01711 );
01712
01721 virtual void resetErrors();
01723
01724
01725
01726
01727
01728
01742 virtual void endInputSource(const InputSource& inputSource);
01743
01758 virtual bool expandSystemId
01759 (
01760 const XMLCh* const systemId
01761 , XMLBuffer& toFill
01762 );
01763
01771 virtual void resetEntities();
01772
01795 virtual InputSource* resolveEntity
01796 (
01797 const XMLCh* const publicId
01798 , const XMLCh* const systemId
01799 , const XMLCh* const baseURI = 0
01800 );
01801
01818 virtual InputSource* resolveEntity
01819 (
01820 XMLResourceIdentifier* resourceIdentifier
01821 );
01822
01834 virtual void startInputSource(const InputSource& inputSource);
01836
01837
01838
01839
01840
01857 virtual void attDef
01858 (
01859 const DTDElementDecl& elemDecl
01860 , const DTDAttDef& attDef
01861 , const bool ignore
01862 );
01863
01873 virtual void doctypeComment
01874 (
01875 const XMLCh* const comment
01876 );
01877
01896 virtual void doctypeDecl
01897 (
01898 const DTDElementDecl& elemDecl
01899 , const XMLCh* const publicId
01900 , const XMLCh* const systemId
01901 , const bool hasIntSubset
01902 , const bool hasExtSubset = false
01903 );
01904
01918 virtual void doctypePI
01919 (
01920 const XMLCh* const target
01921 , const XMLCh* const data
01922 );
01923
01935 virtual void doctypeWhitespace
01936 (
01937 const XMLCh* const chars
01938 , const unsigned int length
01939 );
01940
01953 virtual void elementDecl
01954 (
01955 const DTDElementDecl& decl
01956 , const bool isIgnored
01957 );
01958
01969 virtual void endAttList
01970 (
01971 const DTDElementDecl& elemDecl
01972 );
01973
01980 virtual void endIntSubset();
01981
01988 virtual void endExtSubset();
01989
02004 virtual void entityDecl
02005 (
02006 const DTDEntityDecl& entityDecl
02007 , const bool isPEDecl
02008 , const bool isIgnored
02009 );
02010
02015 virtual void resetDocType();
02016
02029 virtual void notationDecl
02030 (
02031 const XMLNotationDecl& notDecl
02032 , const bool isIgnored
02033 );
02034
02045 virtual void startAttList
02046 (
02047 const DTDElementDecl& elemDecl
02048 );
02049
02056 virtual void startIntSubset();
02057
02064 virtual void startExtSubset();
02065
02078 virtual void TextDecl
02079 (
02080 const XMLCh* const versionStr
02081 , const XMLCh* const encodingStr
02082 );
02084
02085
02086
02087
02088
02101 bool getDoValidation() const;
02102
02116 void setDoValidation(const bool newState);
02118
02119
02120 protected :
02121
02122
02123
02130 const XMLScanner& getScanner() const;
02131
02136 GrammarResolver* getGrammarResolver() const;
02137
02138
02139 private:
02140
02141
02142
02143 SAXParser(const SAXParser&);
02144 SAXParser& operator=(const SAXParser&);
02145
02146
02147
02148
02149 void initialize();
02150 void cleanUp();
02151
02152
02153
02154
02155
02156
02157
02158
02159
02160
02161
02162
02163
02164
02165
02166
02167
02168
02169
02170
02171
02172
02173
02174
02175
02176
02177
02178
02179
02180
02181
02182
02183
02184
02185
02186
02187
02188
02189
02190
02191
02192
02193
02194
02195
02196
02197
02198
02199
02200
02201
02202
02203
02204
02205
02206 bool fParseInProgress;
02207 unsigned int fElemDepth;
02208 unsigned int fAdvDHCount;
02209 unsigned int fAdvDHListSize;
02210 VecAttrListImpl fAttrList;
02211 DocumentHandler* fDocHandler;
02212 DTDHandler* fDTDHandler;
02213 EntityResolver* fEntityResolver;
02214 XMLEntityResolver* fXMLEntityResolver;
02215 ErrorHandler* fErrorHandler;
02216 PSVIHandler* fPSVIHandler;
02217 XMLDocumentHandler** fAdvDHList;
02218 XMLScanner* fScanner;
02219 GrammarResolver* fGrammarResolver;
02220 XMLStringPool* fURIStringPool;
02221 XMLValidator* fValidator;
02222 MemoryManager* fMemoryManager;
02223 XMLGrammarPool* fGrammarPool;
02224 XMLBuffer fElemQNameBuf;
02225 };
02226
02227
02228
02229
02230
02231 inline DocumentHandler* SAXParser::getDocumentHandler()
02232 {
02233 return fDocHandler;
02234 }
02235
02236 inline const DocumentHandler* SAXParser::getDocumentHandler() const
02237 {
02238 return fDocHandler;
02239 }
02240
02241 inline EntityResolver* SAXParser::getEntityResolver()
02242 {
02243 return fEntityResolver;
02244 }
02245
02246 inline XMLEntityResolver* SAXParser::getXMLEntityResolver()
02247 {
02248 return fXMLEntityResolver;
02249 }
02250
02251 inline const XMLEntityResolver* SAXParser::getXMLEntityResolver() const
02252 {
02253 return fXMLEntityResolver;
02254 }
02255
02256 inline const EntityResolver* SAXParser::getEntityResolver() const
02257 {
02258 return fEntityResolver;
02259 }
02260
02261 inline ErrorHandler* SAXParser::getErrorHandler()
02262 {
02263 return fErrorHandler;
02264 }
02265
02266 inline const ErrorHandler* SAXParser::getErrorHandler() const
02267 {
02268 return fErrorHandler;
02269 }
02270
02271 inline PSVIHandler* SAXParser::getPSVIHandler()
02272 {
02273 return fPSVIHandler;
02274 }
02275
02276 inline const PSVIHandler* SAXParser::getPSVIHandler() const
02277 {
02278 return fPSVIHandler;
02279 }
02280
02281 inline const XMLScanner& SAXParser::getScanner() const
02282 {
02283 return *fScanner;
02284 }
02285
02286 inline GrammarResolver* SAXParser::getGrammarResolver() const
02287 {
02288 return fGrammarResolver;
02289 }
02290
02291 XERCES_CPP_NAMESPACE_END
02292
02293 #endif