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
00229 #if !defined(SAXPARSER_HPP)
00230 #define SAXPARSER_HPP
00231
00232 #include <xercesc/sax/Parser.hpp>
00233 #include <xercesc/internal/VecAttrListImpl.hpp>
00234 #include <xercesc/framework/XMLDocumentHandler.hpp>
00235 #include <xercesc/framework/XMLElementDecl.hpp>
00236 #include <xercesc/framework/XMLEntityHandler.hpp>
00237 #include <xercesc/framework/XMLErrorReporter.hpp>
00238 #include <xercesc/framework/XMLBuffer.hpp>
00239 #include <xercesc/util/SecurityManager.hpp>
00240 #include <xercesc/validators/DTD/DocTypeHandler.hpp>
00241
00242 XERCES_CPP_NAMESPACE_BEGIN
00243
00244
00245 class DocumentHandler;
00246 class EntityResolver;
00247 class XMLPScanToken;
00248 class XMLScanner;
00249 class XMLValidator;
00250 class Grammar;
00251 class GrammarResolver;
00252
00253
00264 class SAXParser :
00265
00266 public XMemory
00267 , public Parser
00268 , public XMLDocumentHandler
00269 , public XMLErrorReporter
00270 , public XMLEntityHandler
00271 , public DocTypeHandler
00272 {
00273 public :
00274
00275
00276
00285 enum ValSchemes
00286 {
00287 Val_Never
00288 , Val_Always
00289 , Val_Auto
00290 };
00291
00292
00293
00294
00295
00303 SAXParser
00304 (
00305 XMLValidator* const valToAdopt = 0
00306 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
00307 );
00308
00312 ~SAXParser();
00314
00315
00316
00317
00318
00327 DocumentHandler* getDocumentHandler();
00328
00335 const DocumentHandler* getDocumentHandler() const;
00336
00343 EntityResolver* getEntityResolver();
00344
00351 const EntityResolver* getEntityResolver() const;
00352
00359 ErrorHandler* getErrorHandler();
00360
00367 const ErrorHandler* getErrorHandler() const;
00368
00375 const XMLValidator& getValidator() const;
00376
00384 ValSchemes getValidationScheme() const;
00385
00396 bool getDoSchema() const;
00397
00408 bool getValidationSchemaFullChecking() const;
00409
00420 int getErrorCount() const;
00421
00431 bool getDoNamespaces() const;
00432
00442 bool getExitOnFirstFatalError() const;
00443
00454 bool getValidationConstraintFatal() const;
00455
00475 XMLCh* getExternalSchemaLocation() const;
00476
00496 XMLCh* getExternalNoNamespaceSchemaLocation() const;
00497
00513 SecurityManager* getSecurityManager() const;
00514
00526 bool getLoadExternalDTD() const;
00527
00538 bool isCachingGrammarFromParse() const;
00539
00550 bool isUsingCachedGrammarInParse() const;
00551
00563 bool getCalculateSrcOfs() const;
00564
00575 bool getStandardUriConformant() const;
00576
00583 Grammar* getGrammar(const XMLCh* const nameSpaceKey);
00584
00590 Grammar* getRootGrammar();
00591
00598 const XMLCh* getURIText(unsigned int uriId) const;
00599
00605 unsigned int getSrcOffset() const;
00606
00608
00609
00610
00611
00612
00613
00629 void setDoNamespaces(const bool newState);
00630
00647 void setValidationScheme(const ValSchemes newScheme);
00648
00664 void setDoSchema(const bool newState);
00665
00682 void setValidationSchemaFullChecking(const bool schemaFullChecking);
00683
00699 void setExitOnFirstFatalError(const bool newState);
00700
00720 void setValidationConstraintFatal(const bool newState);
00721
00742 void setExternalSchemaLocation(const XMLCh* const schemaLocation);
00743
00752 void setExternalSchemaLocation(const char* const schemaLocation);
00753
00768 void setExternalNoNamespaceSchemaLocation(const XMLCh* const noNamespaceSchemaLocation);
00769
00778 void setExternalNoNamespaceSchemaLocation(const char* const noNamespaceSchemaLocation);
00779
00795 void setSecurityManager(SecurityManager* const securityManager);
00796
00813 void setLoadExternalDTD(const bool newState);
00814
00832 void cacheGrammarFromParse(const bool newState);
00833
00852 void useCachedGrammarInParse(const bool newState);
00853
00866 void setCalculateSrcOfs(const bool newState);
00867
00878 void setStandardUriConformant(const bool newState);
00879
00887 void useScanner(const XMLCh* const scannerName);
00888
00890
00891
00892
00893
00894
00895
00911 void installAdvDocHandler(XMLDocumentHandler* const toInstall);
00912
00922 bool removeAdvDocHandler(XMLDocumentHandler* const toRemove);
00924
00925
00926
00927
00928
00929
00932
00960 bool parseFirst
00961 (
00962 const XMLCh* const systemId
00963 , XMLPScanToken& toFill
00964 );
00965
00993 bool parseFirst
00994 (
00995 const char* const systemId
00996 , XMLPScanToken& toFill
00997 );
00998
01026 bool parseFirst
01027 (
01028 const InputSource& source
01029 , XMLPScanToken& toFill
01030 );
01031
01056 bool parseNext(XMLPScanToken& token);
01057
01079 void parseReset(XMLPScanToken& token);
01080
01082
01083
01084
01085
01086
01116 Grammar* loadGrammar(const InputSource& source,
01117 const short grammarType,
01118 const bool toCache = false);
01119
01145 Grammar* loadGrammar(const XMLCh* const systemId,
01146 const short grammarType,
01147 const bool toCache = false);
01148
01173 Grammar* loadGrammar(const char* const systemId,
01174 const short grammarType,
01175 const bool toCache = false);
01176
01180 void resetCachedGrammarPool();
01181
01183
01184
01185
01186
01187
01188
01200 virtual void parse(const InputSource& source);
01201
01211 virtual void parse(const XMLCh* const systemId);
01212
01220 virtual void parse(const char* const systemId);
01221
01232 virtual void setDocumentHandler(DocumentHandler* const handler);
01233
01243 virtual void setDTDHandler(DTDHandler* const handler);
01244
01255 virtual void setErrorHandler(ErrorHandler* const handler);
01256
01268 virtual void setEntityResolver(EntityResolver* const resolver);
01270
01271
01272
01273
01274
01275
01293 virtual void docCharacters
01294 (
01295 const XMLCh* const chars
01296 , const unsigned int length
01297 , const bool cdataSection
01298 );
01299
01309 virtual void docComment
01310 (
01311 const XMLCh* const comment
01312 );
01313
01333 virtual void docPI
01334 (
01335 const XMLCh* const target
01336 , const XMLCh* const data
01337 );
01338
01350 virtual void endDocument();
01351
01371 virtual void endElement
01372 (
01373 const XMLElementDecl& elemDecl
01374 , const unsigned int urlId
01375 , const bool isRoot
01376 , const XMLCh* const elemPrefix
01377 );
01378
01389 virtual void endEntityReference
01390 (
01391 const XMLEntityDecl& entDecl
01392 );
01393
01413 virtual void ignorableWhitespace
01414 (
01415 const XMLCh* const chars
01416 , const unsigned int length
01417 , const bool cdataSection
01418 );
01419
01424 virtual void resetDocument();
01425
01436 virtual void startDocument();
01437
01464 virtual void startElement
01465 (
01466 const XMLElementDecl& elemDecl
01467 , const unsigned int urlId
01468 , const XMLCh* const elemPrefix
01469 , const RefVectorOf<XMLAttr>& attrList
01470 , const unsigned int attrCount
01471 , const bool isEmpty
01472 , const bool isRoot
01473 );
01474
01484 virtual void startEntityReference
01485 (
01486 const XMLEntityDecl& entDecl
01487 );
01488
01506 virtual void XMLDecl
01507 (
01508 const XMLCh* const versionStr
01509 , const XMLCh* const encodingStr
01510 , const XMLCh* const standaloneStr
01511 , const XMLCh* const actualEncodingStr
01512 );
01514
01515
01516
01517
01518
01519
01545 virtual void error
01546 (
01547 const unsigned int errCode
01548 , const XMLCh* const msgDomain
01549 , const XMLErrorReporter::ErrTypes errType
01550 , const XMLCh* const errorText
01551 , const XMLCh* const systemId
01552 , const XMLCh* const publicId
01553 , const XMLSSize_t lineNum
01554 , const XMLSSize_t colNum
01555 );
01556
01565 virtual void resetErrors();
01567
01568
01569
01570
01571
01572
01586 virtual void endInputSource(const InputSource& inputSource);
01587
01602 virtual bool expandSystemId
01603 (
01604 const XMLCh* const systemId
01605 , XMLBuffer& toFill
01606 );
01607
01615 virtual void resetEntities();
01616
01637 virtual InputSource* resolveEntity
01638 (
01639 const XMLCh* const publicId
01640 , const XMLCh* const systemId
01641 , const XMLCh* const baseURI = 0
01642 );
01643
01655 virtual void startInputSource(const InputSource& inputSource);
01657
01658
01659
01660
01661
01678 virtual void attDef
01679 (
01680 const DTDElementDecl& elemDecl
01681 , const DTDAttDef& attDef
01682 , const bool ignore
01683 );
01684
01694 virtual void doctypeComment
01695 (
01696 const XMLCh* const comment
01697 );
01698
01717 virtual void doctypeDecl
01718 (
01719 const DTDElementDecl& elemDecl
01720 , const XMLCh* const publicId
01721 , const XMLCh* const systemId
01722 , const bool hasIntSubset
01723 , const bool hasExtSubset = false
01724 );
01725
01739 virtual void doctypePI
01740 (
01741 const XMLCh* const target
01742 , const XMLCh* const data
01743 );
01744
01756 virtual void doctypeWhitespace
01757 (
01758 const XMLCh* const chars
01759 , const unsigned int length
01760 );
01761
01774 virtual void elementDecl
01775 (
01776 const DTDElementDecl& decl
01777 , const bool isIgnored
01778 );
01779
01790 virtual void endAttList
01791 (
01792 const DTDElementDecl& elemDecl
01793 );
01794
01801 virtual void endIntSubset();
01802
01809 virtual void endExtSubset();
01810
01825 virtual void entityDecl
01826 (
01827 const DTDEntityDecl& entityDecl
01828 , const bool isPEDecl
01829 , const bool isIgnored
01830 );
01831
01836 virtual void resetDocType();
01837
01850 virtual void notationDecl
01851 (
01852 const XMLNotationDecl& notDecl
01853 , const bool isIgnored
01854 );
01855
01866 virtual void startAttList
01867 (
01868 const DTDElementDecl& elemDecl
01869 );
01870
01877 virtual void startIntSubset();
01878
01885 virtual void startExtSubset();
01886
01899 virtual void TextDecl
01900 (
01901 const XMLCh* const versionStr
01902 , const XMLCh* const encodingStr
01903 );
01905
01906
01907
01908
01909
01922 bool getDoValidation() const;
01923
01937 void setDoValidation(const bool newState);
01939
01940
01941 protected :
01942
01943
01944
01951 const XMLScanner& getScanner() const;
01952
01953
01954 private:
01955
01956
01957
01958 SAXParser(const SAXParser&);
01959 SAXParser& operator=(const SAXParser&);
01960
01961
01962
01963
01964 void initialize();
01965 void cleanUp();
01966
01967
01968
01969
01970
01971
01972
01973
01974
01975
01976
01977
01978
01979
01980
01981
01982
01983
01984
01985
01986
01987
01988
01989
01990
01991
01992
01993
01994
01995
01996
01997
01998
01999
02000
02001
02002
02003
02004
02005
02006
02007
02008
02009
02010
02011
02012
02013
02014 bool fParseInProgress;
02015 unsigned int fElemDepth;
02016 unsigned int fAdvDHCount;
02017 unsigned int fAdvDHListSize;
02018 VecAttrListImpl fAttrList;
02019 DocumentHandler* fDocHandler;
02020 DTDHandler* fDTDHandler;
02021 EntityResolver* fEntityResolver;
02022 ErrorHandler* fErrorHandler;
02023 XMLDocumentHandler** fAdvDHList;
02024 XMLScanner* fScanner;
02025 GrammarResolver* fGrammarResolver;
02026 XMLStringPool* fURIStringPool;
02027 XMLValidator* fValidator;
02028 MemoryManager* fMemoryManager;
02029 XMLBuffer fElemQNameBuf;
02030 };
02031
02032
02033
02034
02035
02036 inline DocumentHandler* SAXParser::getDocumentHandler()
02037 {
02038 return fDocHandler;
02039 }
02040
02041 inline const DocumentHandler* SAXParser::getDocumentHandler() const
02042 {
02043 return fDocHandler;
02044 }
02045
02046 inline EntityResolver* SAXParser::getEntityResolver()
02047 {
02048 return fEntityResolver;
02049 }
02050
02051 inline const EntityResolver* SAXParser::getEntityResolver() const
02052 {
02053 return fEntityResolver;
02054 }
02055
02056 inline ErrorHandler* SAXParser::getErrorHandler()
02057 {
02058 return fErrorHandler;
02059 }
02060
02061 inline const ErrorHandler* SAXParser::getErrorHandler() const
02062 {
02063 return fErrorHandler;
02064 }
02065
02066 inline const XMLScanner& SAXParser::getScanner() const
02067 {
02068 return *fScanner;
02069 }
02070
02071 XERCES_CPP_NAMESPACE_END
02072
02073 #endif