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 #if !defined(ABSTRACTDOMPARSER_HPP)
00062 #define ABSTRACTDOMPARSER_HPP
00063
00064
00065 #include <xercesc/dom/DOMDocument.hpp>
00066 #include <xercesc/framework/XMLDocumentHandler.hpp>
00067 #include <xercesc/framework/XMLErrorReporter.hpp>
00068 #include <xercesc/framework/XMLEntityHandler.hpp>
00069 #include <xercesc/util/ValueStackOf.hpp>
00070 #include <xercesc/validators/DTD/DocTypeHandler.hpp>
00071 #include <xercesc/dom/DOMDocumentType.hpp>
00072 #include <xercesc/validators/DTD/DTDElementDecl.hpp>
00073 #include <xercesc/framework/XMLBufferMgr.hpp>
00074
00075 class XMLPScanToken;
00076 class XMLScanner;
00077 class XMLValidator;
00078 class DOMDocumentImpl;
00079 class DOMDocumentTypeImpl;
00080 class DOMElement;
00081
00082
00087 class AbstractDOMParser :
00088
00089 public XMLDocumentHandler
00090 , public XMLErrorReporter
00091 , public XMLEntityHandler
00092 , public DocTypeHandler
00093 {
00094 public :
00095
00096
00097
00100
00108 enum ValSchemes
00109 {
00110 Val_Never
00111 , Val_Always
00112 , Val_Auto
00113 };
00115
00116
00117
00118
00119
00122
00126 virtual ~AbstractDOMParser();
00127
00129
00130
00131
00132
00133
00136
00141 void reset();
00142
00156 DOMDocument* adoptDocument();
00157
00159
00160
00161
00162
00163
00164
00167
00179 DOMDocument* getDocument();
00180
00188 const XMLValidator& getValidator() const;
00189
00197 ValSchemes getValidationScheme() const;
00198
00209 bool getDoSchema() const;
00210
00221 bool getValidationSchemaFullChecking() const;
00222
00234 int getErrorCount() const;
00235
00246 bool getDoNamespaces() const;
00247
00260 bool getExitOnFirstFatalError() const;
00261
00272 bool getValidationConstraintFatal() const;
00273
00283 bool getCreateEntityReferenceNodes()const;
00284
00295 bool getIncludeIgnorableWhitespace() const;
00296
00316 XMLCh* getExternalSchemaLocation() const;
00317
00337 XMLCh* getExternalNoNamespaceSchemaLocation() const;
00338
00350 bool getLoadExternalDTD() const;
00351
00360 bool getCreateCommentNodes()const;
00361
00363
00364
00365
00366
00367
00368
00371
00386 void setDoNamespaces(const bool newState);
00387
00404 void setExitOnFirstFatalError(const bool newState);
00405
00425 void setValidationConstraintFatal(const bool newState);
00426
00445 void setCreateEntityReferenceNodes(const bool create);
00446
00468 void setIncludeIgnorableWhitespace(const bool include);
00469
00486 void setValidationScheme(const ValSchemes newScheme);
00487
00503 void setDoSchema(const bool newState);
00504
00521 void setValidationSchemaFullChecking(const bool schemaFullChecking);
00522
00542
00543 void setExternalSchemaLocation(const XMLCh* const schemaLocation);
00544
00553 void setExternalSchemaLocation(const char* const schemaLocation);
00554
00569 void setExternalNoNamespaceSchemaLocation(const XMLCh* const noNamespaceSchemaLocation);
00570
00579 void setExternalNoNamespaceSchemaLocation(const char* const noNamespaceSchemaLocation);
00580
00597 void setLoadExternalDTD(const bool newState);
00598
00609 void setCreateCommentNodes(const bool create);
00610
00612
00613
00614
00615
00616
00617
00620
00636 void parse(const InputSource& source);
00637
00654 void parse(const XMLCh* const systemId);
00655
00671 void parse(const char* const systemId);
00672
00699 bool parseFirst
00700 (
00701 const XMLCh* const systemId
00702 , XMLPScanToken& toFill
00703 );
00704
00732 bool parseFirst
00733 (
00734 const char* const systemId
00735 , XMLPScanToken& toFill
00736 );
00737
00765 bool parseFirst
00766 (
00767 const InputSource& source
00768 , XMLPScanToken& toFill
00769 );
00770
00793 bool parseNext(XMLPScanToken& token);
00794
00820 void parseReset(XMLPScanToken& token);
00821
00823
00824
00825
00826
00827
00830
00843 virtual void docCharacters
00844 (
00845 const XMLCh* const chars
00846 , const unsigned int length
00847 , const bool cdataSection
00848 );
00849
00858 virtual void docComment
00859 (
00860 const XMLCh* const comment
00861 );
00862
00875 virtual void docPI
00876 (
00877 const XMLCh* const target
00878 , const XMLCh* const data
00879 );
00880
00885 virtual void endDocument();
00886
00903 virtual void endElement
00904 (
00905 const XMLElementDecl& elemDecl
00906 , const unsigned int urlId
00907 , const bool isRoot
00908 , const XMLCh* const elemPrefix
00909 );
00910
00919 virtual void endEntityReference
00920 (
00921 const XMLEntityDecl& entDecl
00922 );
00923
00942 virtual void ignorableWhitespace
00943 (
00944 const XMLCh* const chars
00945 , const unsigned int length
00946 , const bool cdataSection
00947 );
00948
00955 virtual void resetDocument();
00956
00961 virtual void startDocument();
00962
00990 virtual void startElement
00991 (
00992 const XMLElementDecl& elemDecl
00993 , const unsigned int urlId
00994 , const XMLCh* const elemPrefix
00995 , const RefVectorOf<XMLAttr>& attrList
00996 , const unsigned int attrCount
00997 , const bool isEmpty
00998 , const bool isRoot
00999 );
01000
01010 virtual void startEntityReference
01011 (
01012 const XMLEntityDecl& entDecl
01013 );
01014
01033 virtual void XMLDecl
01034 (
01035 const XMLCh* const versionStr
01036 , const XMLCh* const encodingStr
01037 , const XMLCh* const standaloneStr
01038 , const XMLCh* const actualEncStr
01039 );
01041
01042
01043
01044
01045
01048
01049 (
01050 const DTDElementDecl& elemDecl
01051 , const DTDAttDef& attDef
01052 , const bool ignoring
01053 );
01054
01055 virtual void doctypeComment
01056 (
01057 const XMLCh* const comment
01058 );
01059
01060 virtual void doctypeDecl
01061 (
01062 const DTDElementDecl& elemDecl
01063 , const XMLCh* const publicId
01064 , const XMLCh* const systemId
01065 , const bool hasIntSubset
01066 );
01067
01068 virtual void doctypePI
01069 (
01070 const XMLCh* const target
01071 , const XMLCh* const data
01072 );
01073
01074 virtual void doctypeWhitespace
01075 (
01076 const XMLCh* const chars
01077 , const unsigned int length
01078 );
01079
01080 virtual void elementDecl
01081 (
01082 const DTDElementDecl& decl
01083 , const bool isIgnored
01084 );
01085
01086 virtual void endAttList
01087 (
01088 const DTDElementDecl& elemDecl
01089 );
01090
01091 virtual void endIntSubset();
01092
01093 virtual void endExtSubset();
01094
01095 virtual void entityDecl
01096 (
01097 const DTDEntityDecl& entityDecl
01098 , const bool isPEDecl
01099 , const bool isIgnored
01100 );
01101
01102 virtual void resetDocType();
01103
01104 virtual void notationDecl
01105 (
01106 const XMLNotationDecl& notDecl
01107 , const bool isIgnored
01108 );
01109
01110 virtual void startAttList
01111 (
01112 const DTDElementDecl& elemDecl
01113 );
01114
01115 virtual void startIntSubset();
01116
01117 virtual void startExtSubset();
01118
01119 virtual void TextDecl
01120 (
01121 const XMLCh* const versionStr
01122 , const XMLCh* const encodingStr
01123 );
01124
01125
01127
01128
01129
01130
01131
01134
01144 bool getDoValidation() const;
01145
01159 void setDoValidation(const bool newState);
01160
01174 bool getExpandEntityReferences() const;
01175
01192 void setExpandEntityReferences(const bool expand);
01193
01195
01196 protected :
01197
01198
01199
01202
01203 *
01204 * Constructor with an instance of validator class to use for
01205 * validation. If you don't provide a validator, a default one will
01206 * be created for you in the scanner.
01207 *
01208 * @param valToAdopt Pointer to the validator instance to use. The
01209 * parser is responsible for freeing the memory.
01210 */
01211 AbstractDOMParser(XMLValidator* const valToAdopt = 0);
01212
01214
01215
01216
01217
01220
01221 *
01222 * This provides derived classes with access to the current node, i.e.
01223 * the node to which new nodes are being added.
01224 */
01225 DOMNode* getCurrentNode();
01226
01231 XMLScanner* getScanner() const;
01232
01238 bool getParseInProgress() const;
01239
01241
01242
01243
01244
01245
01246
01249
01257 void setCurrentNode(DOMNode* toSet);
01258
01265 void setDocument(DOMDocument* toSet);
01266
01273 void setParseInProgress(const bool toSet);
01275
01276
01277
01278
01281
01282 const XMLCh *qualifiedName);
01283
01284 void resetPool();
01286
01287
01288 private :
01289
01290
01291
01292
01293
01294
01295
01296
01297
01298
01299
01300
01301
01302
01303
01304
01305
01306
01307
01308
01309
01310
01311
01312
01313
01314
01315
01316
01317
01318
01319
01320
01321
01322
01323
01324
01325
01326
01327
01328
01329
01330
01331
01332
01333
01334
01335
01336
01337
01338
01339
01340
01341
01342
01343 bool fCreateEntityReferenceNodes;
01344 bool fIncludeIgnorableWhitespace;
01345 bool fWithinElement;
01346 bool fParseInProgress;
01347 XMLBufferMgr fBufMgr;
01348 XMLScanner* fScanner;
01349 DOMNode* fCurrentParent;
01350 DOMNode* fCurrentNode;
01351 DOMEntity* fCurrentEntity;
01352 DOMDocumentImpl* fDocument;
01353 ValueStackOf<DOMNode*>* fNodeStack;
01354 DOMDocumentTypeImpl* fDocumentType;
01355 RefVectorOf<DOMDocumentImpl>* fDocumentVector;
01356 bool fCreateCommentNodes;
01357 bool fDocumentAdoptedByUser;
01358 };
01359
01360
01361
01362
01363
01364
01365 inline bool AbstractDOMParser::getExpandEntityReferences() const
01366 {
01367 return !fCreateEntityReferenceNodes;
01368 }
01369 inline bool AbstractDOMParser::getCreateEntityReferenceNodes() const
01370 {
01371 return fCreateEntityReferenceNodes;
01372 }
01373
01374 inline bool AbstractDOMParser::getIncludeIgnorableWhitespace() const
01375 {
01376 return fIncludeIgnorableWhitespace;
01377 }
01378
01379 inline bool AbstractDOMParser::getParseInProgress() const
01380 {
01381 return fParseInProgress;
01382 }
01383
01384 inline XMLScanner* AbstractDOMParser::getScanner() const
01385 {
01386 return fScanner;
01387 }
01388
01389 inline bool AbstractDOMParser::getCreateCommentNodes() const
01390 {
01391 return fCreateCommentNodes;
01392 }
01393
01394
01395
01396
01397 inline void AbstractDOMParser::setExpandEntityReferences(const bool expand)
01398 {
01399 fCreateEntityReferenceNodes = !expand;
01400 }
01401
01402 inline void AbstractDOMParser::setCreateEntityReferenceNodes(const bool create)
01403 {
01404 fCreateEntityReferenceNodes = create;
01405 }
01406
01407 inline void AbstractDOMParser::setIncludeIgnorableWhitespace(const bool include)
01408 {
01409 fIncludeIgnorableWhitespace = include;
01410 }
01411
01412 inline void AbstractDOMParser::setCreateCommentNodes(const bool create)
01413 {
01414 fCreateCommentNodes = create;
01415 }
01416
01417
01418
01419
01420
01421 inline DOMNode* AbstractDOMParser::getCurrentNode()
01422 {
01423 return fCurrentNode;
01424 }
01425
01426
01427
01428
01429
01430 inline void AbstractDOMParser::setCurrentNode(DOMNode* toSet)
01431 {
01432 fCurrentNode = toSet;
01433 }
01434
01435 inline void AbstractDOMParser::setDocument(DOMDocument* toSet)
01436 {
01437 fDocument = (DOMDocumentImpl *)toSet;
01438 }
01439
01440 inline void AbstractDOMParser::setParseInProgress(const bool toSet)
01441 {
01442 fParseInProgress = toSet;
01443 }
01444
01445 #endif
01446
01447
01448