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 #if !defined(SAXPARSER_HPP)
00147 #define SAXPARSER_HPP
00148
00149 #include <xercesc/sax/Parser.hpp>
00150 #include <xercesc/internal/VecAttrListImpl.hpp>
00151 #include <xercesc/framework/XMLDocumentHandler.hpp>
00152 #include <xercesc/framework/XMLElementDecl.hpp>
00153 #include <xercesc/framework/XMLEntityHandler.hpp>
00154 #include <xercesc/framework/XMLErrorReporter.hpp>
00155 #include <xercesc/validators/DTD/DocTypeHandler.hpp>
00156
00157 class DocumentHandler;
00158 class EntityResolver;
00159 class XMLPScanToken;
00160 class XMLScanner;
00161 class XMLValidator;
00162
00163
00173
00174 class SAXParser :
00175
00176 public Parser
00177 , public XMLDocumentHandler
00178 , public XMLErrorReporter
00179 , public XMLEntityHandler
00180 , public DocTypeHandler
00181 {
00182 public :
00183
00184
00185
00186 enum ValSchemes
00187 {
00188 Val_Never
00189 , Val_Always
00190 , Val_Auto
00191 };
00192
00193
00194
00195
00196
00197
00200
00205 SAXParser(XMLValidator* const valToAdopt = 0);
00206
00210 ~SAXParser();
00212
00213
00216
00222 DocumentHandler* getDocumentHandler();
00223
00230 const DocumentHandler* getDocumentHandler() const;
00231
00238 EntityResolver* getEntityResolver();
00239
00246 const EntityResolver* getEntityResolver() const;
00247
00254 ErrorHandler* getErrorHandler();
00255
00262 const ErrorHandler* getErrorHandler() const;
00263
00270 const XMLScanner& getScanner() const;
00271
00278 const XMLValidator& getValidator() const;
00279
00287 ValSchemes getValidationScheme() const;
00288
00299 bool getDoSchema() const;
00300
00311 bool getValidationSchemaFullChecking() const;
00312
00323 int getErrorCount() const;
00324
00334 bool getDoNamespaces() const;
00335
00345 bool getExitOnFirstFatalError() const;
00346
00357 bool getValidationConstraintFatal() const;
00358
00378 XMLCh* getExternalSchemaLocation() const;
00379
00399 XMLCh* getExternalNoNamespaceSchemaLocation() const;
00400
00402
00403
00404
00405
00406
00407
00410
00427 void setDoNamespaces(const bool newState);
00428
00445 void setValidationScheme(const ValSchemes newScheme);
00446
00460 void setDoSchema(const bool newState);
00461
00478 void setValidationSchemaFullChecking(const bool schemaFullChecking);
00479
00495 void setExitOnFirstFatalError(const bool newState);
00496
00512 void setValidationConstraintFatal(const bool newState);
00513
00533
00534 void setExternalSchemaLocation(const XMLCh* const schemaLocation);
00535
00544 void setExternalSchemaLocation(const char* const schemaLocation);
00545
00560 void setExternalNoNamespaceSchemaLocation(const XMLCh* const noNamespaceSchemaLocation);
00561
00570 void setExternalNoNamespaceSchemaLocation(const char* const noNamespaceSchemaLocation);
00571
00573
00574
00575
00576
00577
00578
00581
00594 void installAdvDocHandler(XMLDocumentHandler* const toInstall);
00595
00605 bool removeAdvDocHandler(XMLDocumentHandler* const toRemove);
00607
00608
00609
00610
00611
00612
00615
00627 virtual void parse(const InputSource& source, const bool reuseGrammar = false);
00628
00641 virtual void parse(const XMLCh* const systemId, const bool reuseGrammar = false);
00642
00653 virtual void parse(const char* const systemId, const bool reuseGrammar = false);
00654
00665 virtual void setDocumentHandler(DocumentHandler* const handler);
00666
00676 virtual void setDTDHandler(DTDHandler* const handler);
00677
00688 virtual void setErrorHandler(ErrorHandler* const handler);
00689
00701 virtual void setEntityResolver(EntityResolver* const resolver);
00703
00704
00705
00706
00707
00708
00711
00742 bool parseFirst
00743 (
00744 const XMLCh* const systemId
00745 , XMLPScanToken& toFill
00746 , const bool reuseGrammar = false
00747 );
00748
00779 bool parseFirst
00780 (
00781 const char* const systemId
00782 , XMLPScanToken& toFill
00783 , const bool reuseGrammar = false
00784 );
00785
00816 bool parseFirst
00817 (
00818 const InputSource& source
00819 , XMLPScanToken& toFill
00820 , const bool reuseGrammar = false
00821 );
00822
00847 bool parseNext(XMLPScanToken& token);
00848
00870 void parseReset(XMLPScanToken& token);
00871
00873
00874
00875
00876
00877
00878
00879
00882
00896 virtual void attDef
00897 (
00898 const DTDElementDecl& elemDecl
00899 , const DTDAttDef& attDef
00900 , const bool ignore
00901 );
00902
00912 virtual void doctypeComment
00913 (
00914 const XMLCh* const comment
00915 );
00916
00933 virtual void doctypeDecl
00934 (
00935 const DTDElementDecl& elemDecl
00936 , const XMLCh* const publicId
00937 , const XMLCh* const systemId
00938 , const bool hasIntSubset
00939 );
00940
00954 virtual void doctypePI
00955 (
00956 const XMLCh* const target
00957 , const XMLCh* const data
00958 );
00959
00971 virtual void doctypeWhitespace
00972 (
00973 const XMLCh* const chars
00974 , const unsigned int length
00975 );
00976
00989 virtual void elementDecl
00990 (
00991 const DTDElementDecl& decl
00992 , const bool isIgnored
00993 );
00994
01005 virtual void endAttList
01006 (
01007 const DTDElementDecl& elemDecl
01008 );
01009
01016 virtual void endIntSubset();
01017
01024 virtual void endExtSubset();
01025
01040 virtual void entityDecl
01041 (
01042 const DTDEntityDecl& entityDecl
01043 , const bool isPEDecl
01044 , const bool isIgnored
01045 );
01046
01051 virtual void resetDocType();
01052
01065 virtual void notationDecl
01066 (
01067 const XMLNotationDecl& notDecl
01068 , const bool isIgnored
01069 );
01070
01081 virtual void startAttList
01082 (
01083 const DTDElementDecl& elemDecl
01084 );
01085
01092 virtual void startIntSubset();
01093
01100 virtual void startExtSubset();
01101
01114 virtual void TextDecl
01115 (
01116 const XMLCh* const versionStr
01117 , const XMLCh* const encodingStr
01118 );
01120
01121
01122
01123
01124
01125
01128
01143 virtual void docCharacters
01144 (
01145 const XMLCh* const chars
01146 , const unsigned int length
01147 , const bool cdataSection
01148 );
01149
01159 virtual void docComment
01160 (
01161 const XMLCh* const comment
01162 );
01163
01183 virtual void docPI
01184 (
01185 const XMLCh* const target
01186 , const XMLCh* const data
01187 );
01188
01200 virtual void endDocument();
01201
01218 virtual void endElement
01219 (
01220 const XMLElementDecl& elemDecl
01221 , const unsigned int urlId
01222 , const bool isRoot
01223 );
01224
01235 virtual void endEntityReference
01236 (
01237 const XMLEntityDecl& entDecl
01238 );
01239
01259 virtual void ignorableWhitespace
01260 (
01261 const XMLCh* const chars
01262 , const unsigned int length
01263 , const bool cdataSection
01264 );
01265
01270 virtual void resetDocument();
01271
01282 virtual void startDocument();
01283
01310 virtual void startElement
01311 (
01312 const XMLElementDecl& elemDecl
01313 , const unsigned int urlId
01314 , const XMLCh* const elemPrefix
01315 , const RefVectorOf<XMLAttr>& attrList
01316 , const unsigned int attrCount
01317 , const bool isEmpty
01318 , const bool isRoot
01319 );
01320
01330 virtual void startEntityReference
01331 (
01332 const XMLEntityDecl& entDecl
01333 );
01334
01352 virtual void XMLDecl
01353 (
01354 const XMLCh* const versionStr
01355 , const XMLCh* const encodingStr
01356 , const XMLCh* const standaloneStr
01357 , const XMLCh* const actualEncodingStr
01358 );
01360
01361
01362
01363
01364
01365
01368
01391 virtual void error
01392 (
01393 const unsigned int errCode
01394 , const XMLCh* const msgDomain
01395 , const XMLErrorReporter::ErrTypes errType
01396 , const XMLCh* const errorText
01397 , const XMLCh* const systemId
01398 , const XMLCh* const publicId
01399 , const unsigned int lineNum
01400 , const unsigned int colNum
01401 );
01402
01411 virtual void resetErrors();
01413
01414
01415
01416
01417
01418
01421
01432 virtual void endInputSource(const InputSource& inputSource);
01433
01448 virtual bool expandSystemId
01449 (
01450 const XMLCh* const systemId
01451 , XMLBuffer& toFill
01452 );
01453
01461 virtual void resetEntities();
01462
01477 virtual InputSource* resolveEntity
01478 (
01479 const XMLCh* const publicId
01480 , const XMLCh* const systemId
01481 );
01482
01494 virtual void startInputSource(const InputSource& inputSource);
01496
01497
01500
01510 bool getDoValidation() const;
01511
01525 void setDoValidation(const bool newState);
01527
01528
01529 protected :
01530
01531
01532
01533 SAXParser(const SAXParser&);
01534 void operator=(const SAXParser&);
01535
01536
01537
01538
01539
01540
01541
01542
01543
01544
01545
01546
01547
01548
01549
01550
01551
01552
01553
01554
01555
01556
01557
01558
01559
01560
01561
01562
01563
01564
01565
01566
01567
01568
01569
01570
01571
01572
01573
01574
01575
01576
01577
01578
01579
01580
01581
01582
01583
01584 VecAttrListImpl fAttrList;
01585 DocumentHandler* fDocHandler;
01586 DTDHandler* fDTDHandler;
01587 unsigned int fElemDepth;
01588 EntityResolver* fEntityResolver;
01589 ErrorHandler* fErrorHandler;
01590 unsigned int fAdvDHCount;
01591 XMLDocumentHandler** fAdvDHList;
01592 unsigned int fAdvDHListSize;
01593 bool fParseInProgress;
01594 XMLScanner* fScanner;
01595 };
01596
01597
01598
01599
01600
01601 inline DocumentHandler* SAXParser::getDocumentHandler()
01602 {
01603 return fDocHandler;
01604 }
01605
01606 inline const DocumentHandler* SAXParser::getDocumentHandler() const
01607 {
01608 return fDocHandler;
01609 }
01610
01611 inline EntityResolver* SAXParser::getEntityResolver()
01612 {
01613 return fEntityResolver;
01614 }
01615
01616 inline const EntityResolver* SAXParser::getEntityResolver() const
01617 {
01618 return fEntityResolver;
01619 }
01620
01621 inline ErrorHandler* SAXParser::getErrorHandler()
01622 {
01623 return fErrorHandler;
01624 }
01625
01626 inline const ErrorHandler* SAXParser::getErrorHandler() const
01627 {
01628 return fErrorHandler;
01629 }
01630
01631 inline const XMLScanner& SAXParser::getScanner() const
01632 {
01633 return *fScanner;
01634 }
01635
01636 #endif