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 #if !defined(SAXPARSER_HPP)
00177 #define SAXPARSER_HPP
00178
00179 #include <xercesc/sax/Parser.hpp>
00180 #include <xercesc/internal/VecAttrListImpl.hpp>
00181 #include <xercesc/framework/XMLDocumentHandler.hpp>
00182 #include <xercesc/framework/XMLElementDecl.hpp>
00183 #include <xercesc/framework/XMLEntityHandler.hpp>
00184 #include <xercesc/framework/XMLErrorReporter.hpp>
00185 #include <xercesc/validators/DTD/DocTypeHandler.hpp>
00186
00187 class DocumentHandler;
00188 class EntityResolver;
00189 class XMLPScanToken;
00190 class XMLScanner;
00191 class XMLValidator;
00192 class Grammar;
00193
00194
00204
00205 class SAXParser :
00206
00207 public Parser
00208 , public XMLDocumentHandler
00209 , public XMLErrorReporter
00210 , public XMLEntityHandler
00211 , public DocTypeHandler
00212 {
00213 public :
00214
00215
00216
00224
00225 enum ValSchemes
00226 {
00227 Val_Never
00228 , Val_Always
00229 , Val_Auto
00230 };
00231
00232
00233
00234
00235
00238
00239 * validation.
00240 * @param valToAdopt Pointer to the validator instance to use. The
00241 * parser is responsible for freeing the memory.
00242 */
00243 SAXParser(XMLValidator* const valToAdopt = 0);
00244
00248 ~SAXParser();
00250
00251
00252
00253
00254
00257
00263 DocumentHandler* getDocumentHandler();
00264
00271 const DocumentHandler* getDocumentHandler() const;
00272
00279 EntityResolver* getEntityResolver();
00280
00287 const EntityResolver* getEntityResolver() const;
00288
00295 ErrorHandler* getErrorHandler();
00296
00303 const ErrorHandler* getErrorHandler() const;
00304
00311 const XMLValidator& getValidator() const;
00312
00320 ValSchemes getValidationScheme() const;
00321
00332 bool getDoSchema() const;
00333
00344 bool getValidationSchemaFullChecking() const;
00345
00356 int getErrorCount() const;
00357
00367 bool getDoNamespaces() const;
00368
00378 bool getExitOnFirstFatalError() const;
00379
00390 bool getValidationConstraintFatal() const;
00391
00411 XMLCh* getExternalSchemaLocation() const;
00412
00432 XMLCh* getExternalNoNamespaceSchemaLocation() const;
00433
00445 bool getLoadExternalDTD() const;
00446
00457 bool isCachingGrammarFromParse() const;
00458
00469 bool isUsingCachedGrammarInParse() const;
00470
00477 Grammar* getGrammar(const XMLCh* const nameSpaceKey);
00478
00484 Grammar* getRootGrammar();
00485
00492 const XMLCh* getURIText(unsigned int uriId);
00493
00495
00496
00497
00498
00499
00500
00503
00516 void setDoNamespaces(const bool newState);
00517
00534 void setValidationScheme(const ValSchemes newScheme);
00535
00551 void setDoSchema(const bool newState);
00552
00569 void setValidationSchemaFullChecking(const bool schemaFullChecking);
00570
00586 void setExitOnFirstFatalError(const bool newState);
00587
00607 void setValidationConstraintFatal(const bool newState);
00608
00628
00629 void setExternalSchemaLocation(const XMLCh* const schemaLocation);
00630
00639 void setExternalSchemaLocation(const char* const schemaLocation);
00640
00655 void setExternalNoNamespaceSchemaLocation(const XMLCh* const noNamespaceSchemaLocation);
00656
00665 void setExternalNoNamespaceSchemaLocation(const char* const noNamespaceSchemaLocation);
00666
00683 void setLoadExternalDTD(const bool newState);
00684
00702 void cacheGrammarFromParse(const bool newState);
00703
00722 void useCachedGrammarInParse(const bool newState);
00723
00724
00726
00727
00728
00729
00730
00731
00734
00747 void installAdvDocHandler(XMLDocumentHandler* const toInstall);
00748
00758 bool removeAdvDocHandler(XMLDocumentHandler* const toRemove);
00760
00761
00762
00763
00764
00765
00768
00796 bool parseFirst
00797 (
00798 const XMLCh* const systemId
00799 , XMLPScanToken& toFill
00800 );
00801
00829 bool parseFirst
00830 (
00831 const char* const systemId
00832 , XMLPScanToken& toFill
00833 );
00834
00862 bool parseFirst
00863 (
00864 const InputSource& source
00865 , XMLPScanToken& toFill
00866 );
00867
00892 bool parseNext(XMLPScanToken& token);
00893
00915 void parseReset(XMLPScanToken& token);
00916
00918
00919
00920
00921
00922
00925
00952 Grammar* loadGrammar(const InputSource& source,
00953 const short grammarType,
00954 const bool toCache = false);
00955
00981 Grammar* loadGrammar(const XMLCh* const systemId,
00982 const short grammarType,
00983 const bool toCache = false);
00984
01009 Grammar* loadGrammar(const char* const systemId,
01010 const short grammarType,
01011 const bool toCache = false);
01012
01016 void resetCachedGrammarPool();
01017
01019
01020
01021
01022
01023
01024
01027
01036 virtual void parse(const InputSource& source);
01037
01047 virtual void parse(const XMLCh* const systemId);
01048
01056 virtual void parse(const char* const systemId);
01057
01068 virtual void setDocumentHandler(DocumentHandler* const handler);
01069
01079 virtual void setDTDHandler(DTDHandler* const handler);
01080
01091 virtual void setErrorHandler(ErrorHandler* const handler);
01092
01104 virtual void setEntityResolver(EntityResolver* const resolver);
01106
01107
01108
01109
01110
01111
01114
01129 virtual void docCharacters
01130 (
01131 const XMLCh* const chars
01132 , const unsigned int length
01133 , const bool cdataSection
01134 );
01135
01145 virtual void docComment
01146 (
01147 const XMLCh* const comment
01148 );
01149
01169 virtual void docPI
01170 (
01171 const XMLCh* const target
01172 , const XMLCh* const data
01173 );
01174
01186 virtual void endDocument();
01187
01207 virtual void endElement
01208 (
01209 const XMLElementDecl& elemDecl
01210 , const unsigned int urlId
01211 , const bool isRoot
01212 , const XMLCh* const elemPrefix
01213 );
01214
01225 virtual void endEntityReference
01226 (
01227 const XMLEntityDecl& entDecl
01228 );
01229
01249 virtual void ignorableWhitespace
01250 (
01251 const XMLCh* const chars
01252 , const unsigned int length
01253 , const bool cdataSection
01254 );
01255
01260 virtual void resetDocument();
01261
01272 virtual void startDocument();
01273
01300 virtual void startElement
01301 (
01302 const XMLElementDecl& elemDecl
01303 , const unsigned int urlId
01304 , const XMLCh* const elemPrefix
01305 , const RefVectorOf<XMLAttr>& attrList
01306 , const unsigned int attrCount
01307 , const bool isEmpty
01308 , const bool isRoot
01309 );
01310
01320 virtual void startEntityReference
01321 (
01322 const XMLEntityDecl& entDecl
01323 );
01324
01342 virtual void XMLDecl
01343 (
01344 const XMLCh* const versionStr
01345 , const XMLCh* const encodingStr
01346 , const XMLCh* const standaloneStr
01347 , const XMLCh* const actualEncodingStr
01348 );
01350
01351
01352
01353
01354
01355
01358
01381 virtual void error
01382 (
01383 const unsigned int errCode
01384 , const XMLCh* const msgDomain
01385 , const XMLErrorReporter::ErrTypes errType
01386 , const XMLCh* const errorText
01387 , const XMLCh* const systemId
01388 , const XMLCh* const publicId
01389 , const XMLSSize_t lineNum
01390 , const XMLSSize_t colNum
01391 );
01392
01401 virtual void resetErrors();
01403
01404
01405
01406
01407
01408
01411
01422 virtual void endInputSource(const InputSource& inputSource);
01423
01438 virtual bool expandSystemId
01439 (
01440 const XMLCh* const systemId
01441 , XMLBuffer& toFill
01442 );
01443
01451 virtual void resetEntities();
01452
01473 virtual InputSource* resolveEntity
01474 (
01475 const XMLCh* const publicId
01476 , const XMLCh* const systemId
01477 , const XMLCh* const baseURI = 0
01478 );
01479
01491 virtual void startInputSource(const InputSource& inputSource);
01493
01494
01495
01496
01497
01500
01514 virtual void attDef
01515 (
01516 const DTDElementDecl& elemDecl
01517 , const DTDAttDef& attDef
01518 , const bool ignore
01519 );
01520
01530 virtual void doctypeComment
01531 (
01532 const XMLCh* const comment
01533 );
01534
01551 virtual void doctypeDecl
01552 (
01553 const DTDElementDecl& elemDecl
01554 , const XMLCh* const publicId
01555 , const XMLCh* const systemId
01556 , const bool hasIntSubset
01557 );
01558
01572 virtual void doctypePI
01573 (
01574 const XMLCh* const target
01575 , const XMLCh* const data
01576 );
01577
01589 virtual void doctypeWhitespace
01590 (
01591 const XMLCh* const chars
01592 , const unsigned int length
01593 );
01594
01607 virtual void elementDecl
01608 (
01609 const DTDElementDecl& decl
01610 , const bool isIgnored
01611 );
01612
01623 virtual void endAttList
01624 (
01625 const DTDElementDecl& elemDecl
01626 );
01627
01634 virtual void endIntSubset();
01635
01642 virtual void endExtSubset();
01643
01658 virtual void entityDecl
01659 (
01660 const DTDEntityDecl& entityDecl
01661 , const bool isPEDecl
01662 , const bool isIgnored
01663 );
01664
01669 virtual void resetDocType();
01670
01683 virtual void notationDecl
01684 (
01685 const XMLNotationDecl& notDecl
01686 , const bool isIgnored
01687 );
01688
01699 virtual void startAttList
01700 (
01701 const DTDElementDecl& elemDecl
01702 );
01703
01710 virtual void startIntSubset();
01711
01718 virtual void startExtSubset();
01719
01732 virtual void TextDecl
01733 (
01734 const XMLCh* const versionStr
01735 , const XMLCh* const encodingStr
01736 );
01738
01739
01740
01741
01742
01745
01755 bool getDoValidation() const;
01756
01770 void setDoValidation(const bool newState);
01772
01773
01774 protected :
01775
01776
01777
01784 const XMLScanner& getScanner() const;
01785
01786
01787 private:
01788
01789
01790
01791 SAXParser(const SAXParser&);
01792 void operator=(const SAXParser&);
01793
01794
01795
01796
01797
01798
01799
01800
01801
01802
01803
01804
01805
01806
01807
01808
01809
01810
01811
01812
01813
01814
01815
01816
01817
01818
01819
01820
01821
01822
01823
01824
01825
01826
01827
01828
01829
01830
01831
01832
01833
01834
01835
01836
01837
01838
01839
01840
01841
01842 VecAttrListImpl fAttrList;
01843 DocumentHandler* fDocHandler;
01844 DTDHandler* fDTDHandler;
01845 unsigned int fElemDepth;
01846 EntityResolver* fEntityResolver;
01847 ErrorHandler* fErrorHandler;
01848 unsigned int fAdvDHCount;
01849 XMLDocumentHandler** fAdvDHList;
01850 unsigned int fAdvDHListSize;
01851 bool fParseInProgress;
01852 XMLScanner* fScanner;
01853 };
01854
01855
01856
01857
01858
01859 inline DocumentHandler* SAXParser::getDocumentHandler()
01860 {
01861 return fDocHandler;
01862 }
01863
01864 inline const DocumentHandler* SAXParser::getDocumentHandler() const
01865 {
01866 return fDocHandler;
01867 }
01868
01869 inline EntityResolver* SAXParser::getEntityResolver()
01870 {
01871 return fEntityResolver;
01872 }
01873
01874 inline const EntityResolver* SAXParser::getEntityResolver() const
01875 {
01876 return fEntityResolver;
01877 }
01878
01879 inline ErrorHandler* SAXParser::getErrorHandler()
01880 {
01881 return fErrorHandler;
01882 }
01883
01884 inline const ErrorHandler* SAXParser::getErrorHandler() const
01885 {
01886 return fErrorHandler;
01887 }
01888
01889 inline const XMLScanner& SAXParser::getScanner() const
01890 {
01891 return *fScanner;
01892 }
01893
01894 #endif