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 #if !defined(SAXPARSER_HPP)
00150 #define SAXPARSER_HPP
00151
00152 #include <xercesc/sax/Parser.hpp>
00153 #include <xercesc/internal/VecAttrListImpl.hpp>
00154 #include <xercesc/framework/XMLDocumentHandler.hpp>
00155 #include <xercesc/framework/XMLElementDecl.hpp>
00156 #include <xercesc/framework/XMLEntityHandler.hpp>
00157 #include <xercesc/framework/XMLErrorReporter.hpp>
00158 #include <xercesc/validators/DTD/DocTypeHandler.hpp>
00159
00160 class DocumentHandler;
00161 class EntityResolver;
00162 class XMLPScanToken;
00163 class XMLScanner;
00164 class XMLValidator;
00165
00166
00177 class PARSERS_EXPORT SAXParser :
00178
00179 public Parser
00180 , public XMLDocumentHandler
00181 , public XMLErrorReporter
00182 , public XMLEntityHandler
00183 , public DocTypeHandler
00184 {
00185 public :
00186
00187
00188
00189 enum ValSchemes
00190 {
00191 Val_Never
00192 , Val_Always
00193 , Val_Auto
00194 };
00195
00196
00197
00198
00199
00200
00208 SAXParser(XMLValidator* const valToAdopt = 0);
00209
00213 ~SAXParser();
00215
00216
00225 DocumentHandler* getDocumentHandler();
00226
00233 const DocumentHandler* getDocumentHandler() const;
00234
00241 EntityResolver* getEntityResolver();
00242
00249 const EntityResolver* getEntityResolver() const;
00250
00257 ErrorHandler* getErrorHandler();
00258
00265 const ErrorHandler* getErrorHandler() const;
00266
00273 const XMLScanner& getScanner() const;
00274
00281 const XMLValidator& getValidator() const;
00282
00290 ValSchemes getValidationScheme() const;
00291
00302 bool getDoSchema() const;
00303
00314 bool getValidationSchemaFullChecking() const;
00315
00326 int getErrorCount() const;
00327
00337 bool getDoNamespaces() const;
00338
00348 bool getExitOnFirstFatalError() const;
00349
00360 bool getValidationConstraintFatal() const;
00361
00381 XMLCh* getExternalSchemaLocation() const;
00382
00402 XMLCh* getExternalNoNamespaceSchemaLocation() const;
00403
00413 bool getURLEntityCaching() const;
00414
00424 XMLCh* getURLEntityCacheDir() const;
00425
00427
00428
00429
00430
00431
00432
00452 void setDoNamespaces(const bool newState);
00453
00470 void setValidationScheme(const ValSchemes newScheme);
00471
00485 void setDoSchema(const bool newState);
00486
00503 void setValidationSchemaFullChecking(const bool schemaFullChecking);
00504
00520 void setExitOnFirstFatalError(const bool newState);
00521
00537 void setValidationConstraintFatal(const bool newState);
00538
00559 void setExternalSchemaLocation(const XMLCh* const schemaLocation);
00560
00569 void setExternalSchemaLocation(const char* const schemaLocation);
00570
00585 void setExternalNoNamespaceSchemaLocation(const XMLCh* const noNamespaceSchemaLocation);
00586
00595 void setExternalNoNamespaceSchemaLocation(const char* const noNamespaceSchemaLocation);
00596
00610 void setURLEntityCaching(const bool useCache);
00611
00626 void setURLEntityCacheDir(const XMLCh* cachedir);
00627
00637 void setURLEntityCacheDir(const char* cachedir);
00638
00640
00641
00642
00643
00644
00645
00661 void installAdvDocHandler(XMLDocumentHandler* const toInstall);
00662
00672 bool removeAdvDocHandler(XMLDocumentHandler* const toRemove);
00674
00675
00676
00677
00678
00679
00694 virtual void parse(const InputSource& source, const bool reuseGrammar = false);
00695
00708 virtual void parse(const XMLCh* const systemId, const bool reuseGrammar = false);
00709
00720 virtual void parse(const char* const systemId, const bool reuseGrammar = false);
00721
00732 virtual void setDocumentHandler(DocumentHandler* const handler);
00733
00743 virtual void setDTDHandler(DTDHandler* const handler);
00744
00755 virtual void setErrorHandler(ErrorHandler* const handler);
00756
00768 virtual void setEntityResolver(EntityResolver* const resolver);
00770
00771
00772
00773
00774
00775
00778
00809 bool parseFirst
00810 (
00811 const XMLCh* const systemId
00812 , XMLPScanToken& toFill
00813 , const bool reuseGrammar = false
00814 );
00815
00846 bool parseFirst
00847 (
00848 const char* const systemId
00849 , XMLPScanToken& toFill
00850 , const bool reuseGrammar = false
00851 );
00852
00883 bool parseFirst
00884 (
00885 const InputSource& source
00886 , XMLPScanToken& toFill
00887 , const bool reuseGrammar = false
00888 );
00889
00914 bool parseNext(XMLPScanToken& token);
00915
00937 void parseReset(XMLPScanToken& token);
00938
00940
00941
00942
00943
00944
00945
00946
00963 virtual void attDef
00964 (
00965 const DTDElementDecl& elemDecl
00966 , const DTDAttDef& attDef
00967 , const bool ignore
00968 );
00969
00979 virtual void doctypeComment
00980 (
00981 const XMLCh* const comment
00982 );
00983
01000 virtual void doctypeDecl
01001 (
01002 const DTDElementDecl& elemDecl
01003 , const XMLCh* const publicId
01004 , const XMLCh* const systemId
01005 , const bool hasIntSubset
01006 );
01007
01021 virtual void doctypePI
01022 (
01023 const XMLCh* const target
01024 , const XMLCh* const data
01025 );
01026
01038 virtual void doctypeWhitespace
01039 (
01040 const XMLCh* const chars
01041 , const unsigned int length
01042 );
01043
01056 virtual void elementDecl
01057 (
01058 const DTDElementDecl& decl
01059 , const bool isIgnored
01060 );
01061
01072 virtual void endAttList
01073 (
01074 const DTDElementDecl& elemDecl
01075 );
01076
01083 virtual void endIntSubset();
01084
01091 virtual void endExtSubset();
01092
01107 virtual void entityDecl
01108 (
01109 const DTDEntityDecl& entityDecl
01110 , const bool isPEDecl
01111 , const bool isIgnored
01112 );
01113
01118 virtual void resetDocType();
01119
01132 virtual void notationDecl
01133 (
01134 const XMLNotationDecl& notDecl
01135 , const bool isIgnored
01136 );
01137
01148 virtual void startAttList
01149 (
01150 const DTDElementDecl& elemDecl
01151 );
01152
01159 virtual void startIntSubset();
01160
01167 virtual void startExtSubset();
01168
01181 virtual void TextDecl
01182 (
01183 const XMLCh* const versionStr
01184 , const XMLCh* const encodingStr
01185 );
01187
01188
01189
01190
01191
01192
01210 virtual void docCharacters
01211 (
01212 const XMLCh* const chars
01213 , const unsigned int length
01214 , const bool cdataSection
01215 );
01216
01226 virtual void docComment
01227 (
01228 const XMLCh* const comment
01229 );
01230
01250 virtual void docPI
01251 (
01252 const XMLCh* const target
01253 , const XMLCh* const data
01254 );
01255
01267 virtual void endDocument();
01268
01285 virtual void endElement
01286 (
01287 const XMLElementDecl& elemDecl
01288 , const unsigned int urlId
01289 , const bool isRoot
01290 );
01291
01302 virtual void endEntityReference
01303 (
01304 const XMLEntityDecl& entDecl
01305 );
01306
01326 virtual void ignorableWhitespace
01327 (
01328 const XMLCh* const chars
01329 , const unsigned int length
01330 , const bool cdataSection
01331 );
01332
01337 virtual void resetDocument();
01338
01349 virtual void startDocument();
01350
01377 virtual void startElement
01378 (
01379 const XMLElementDecl& elemDecl
01380 , const unsigned int urlId
01381 , const XMLCh* const elemPrefix
01382 , const RefVectorOf<XMLAttr>& attrList
01383 , const unsigned int attrCount
01384 , const bool isEmpty
01385 , const bool isRoot
01386 );
01387
01397 virtual void startEntityReference
01398 (
01399 const XMLEntityDecl& entDecl
01400 );
01401
01419 virtual void XMLDecl
01420 (
01421 const XMLCh* const versionStr
01422 , const XMLCh* const encodingStr
01423 , const XMLCh* const standaloneStr
01424 , const XMLCh* const actualEncodingStr
01425 );
01427
01428
01429
01430
01431
01432
01458 virtual void error
01459 (
01460 const unsigned int errCode
01461 , const XMLCh* const msgDomain
01462 , const XMLErrorReporter::ErrTypes errType
01463 , const XMLCh* const errorText
01464 , const XMLCh* const systemId
01465 , const XMLCh* const publicId
01466 , const unsigned int lineNum
01467 , const unsigned int colNum
01468 );
01469
01478 virtual void resetErrors();
01480
01481
01482
01483
01484
01485
01499 virtual void endInputSource(const InputSource& inputSource);
01500
01515 virtual bool expandSystemId
01516 (
01517 const XMLCh* const systemId
01518 , XMLBuffer& toFill
01519 );
01520
01528 virtual void resetEntities();
01529
01544 virtual InputSource* resolveEntity
01545 (
01546 const XMLCh* const publicId
01547 , const XMLCh* const systemId
01548 );
01549
01561 virtual void startInputSource(const InputSource& inputSource);
01563
01564
01577 bool getDoValidation() const;
01578
01592 void setDoValidation(const bool newState);
01594
01595
01596 protected :
01597
01598
01599
01600 SAXParser(const SAXParser&);
01601 void operator=(const SAXParser&);
01602
01603
01604
01605
01606
01607
01608
01609
01610
01611
01612
01613
01614
01615
01616
01617
01618
01619
01620
01621
01622
01623
01624
01625
01626
01627
01628
01629
01630
01631
01632
01633
01634
01635
01636
01637
01638
01639
01640
01641
01642
01643
01644
01645
01646
01647
01648
01649
01650
01651 VecAttrListImpl fAttrList;
01652 DocumentHandler* fDocHandler;
01653 DTDHandler* fDTDHandler;
01654 unsigned int fElemDepth;
01655 EntityResolver* fEntityResolver;
01656 ErrorHandler* fErrorHandler;
01657 unsigned int fAdvDHCount;
01658 XMLDocumentHandler** fAdvDHList;
01659 unsigned int fAdvDHListSize;
01660 bool fParseInProgress;
01661 XMLScanner* fScanner;
01662 };
01663
01664
01665
01666
01667
01668 inline DocumentHandler* SAXParser::getDocumentHandler()
01669 {
01670 return fDocHandler;
01671 }
01672
01673 inline const DocumentHandler* SAXParser::getDocumentHandler() const
01674 {
01675 return fDocHandler;
01676 }
01677
01678 inline EntityResolver* SAXParser::getEntityResolver()
01679 {
01680 return fEntityResolver;
01681 }
01682
01683 inline const EntityResolver* SAXParser::getEntityResolver() const
01684 {
01685 return fEntityResolver;
01686 }
01687
01688 inline ErrorHandler* SAXParser::getErrorHandler()
01689 {
01690 return fErrorHandler;
01691 }
01692
01693 inline const ErrorHandler* SAXParser::getErrorHandler() const
01694 {
01695 return fErrorHandler;
01696 }
01697
01698 inline const XMLScanner& SAXParser::getScanner() const
01699 {
01700 return *fScanner;
01701 }
01702
01703 #endif