http://xml.apache.org/http://www.apache.org/http://www.w3.org/

Home

Readme
Release Info

Installation
Download
Build

FAQs
Samples
API Docs

DOM C++ Binding
Programming
Migration Guide

Feedback
Bug-Reporting
PDF Document

CVS Repository
Mail Archive

API Docs for SAX and DOM
 

Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

SAXParser.hpp

Go to the documentation of this file.
00001 /*
00002  * The Apache Software License, Version 1.1
00003  *
00004  * Copyright (c) 1999-2003 The Apache Software Foundation.  All rights
00005  * reserved.
00006  *
00007  * Redistribution and use in source and binary forms, with or without
00008  * modification, are permitted provided that the following conditions
00009  * are met:
00010  *
00011  * 1. Redistributions of source code must retain the above copyright
00012  *    notice, this list of conditions and the following disclaimer.
00013  *
00014  * 2. Redistributions in binary form must reproduce the above copyright
00015  *    notice, this list of conditions and the following disclaimer in
00016  *    the documentation and/or other materials provided with the
00017  *    distribution.
00018  *
00019  * 3. The end-user documentation included with the redistribution,
00020  *    if any, must include the following acknowledgment:
00021  *       "This product includes software developed by the
00022  *        Apache Software Foundation (http://www.apache.org/)."
00023  *    Alternately, this acknowledgment may appear in the software itself,
00024  *    if and wherever such third-party acknowledgments normally appear.
00025  *
00026  * 4. The names "Xerces" and "Apache Software Foundation" must
00027  *    not be used to endorse or promote products derived from this
00028  *    software without prior written permission. For written
00029  *    permission, please contact apache\@apache.org.
00030  *
00031  * 5. Products derived from this software may not be called "Apache",
00032  *    nor may "Apache" appear in their name, without prior written
00033  *    permission of the Apache Software Foundation.
00034  *
00035  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
00036  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
00037  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00038  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
00039  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00040  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00041  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
00042  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00043  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
00044  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
00045  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00046  * SUCH DAMAGE.
00047  * ====================================================================
00048  *
00049  * This software consists of voluntary contributions made by many
00050  * individuals on behalf of the Apache Software Foundation, and was
00051  * originally based on software copyright (c) 1999, International
00052  * Business Machines, Inc., http://www.ibm.com .  For more information
00053  * on the Apache Software Foundation, please see
00054  * <http://www.apache.org/>.
00055  */
00056 
00057 /*
00058  * $Log: SAXParser.hpp,v $
00059  * Revision 1.23  2003/05/15 18:26:50  knoaman
00060  * Partial implementation of the configurable memory manager.
00061  *
00062  * Revision 1.22  2003/04/17 21:58:50  neilg
00063  * Adding a new property,
00064  * http://apache.org/xml/properties/security-manager, with
00065  * appropriate getSecurityManager/setSecurityManager methods on DOM
00066  * and SAX parsers.  Also adding a new SecurityManager class.
00067  *
00068  * The purpose of these modifications is to permit applications a
00069  * means to have the parser reject documents whose processing would
00070  * otherwise consume large amounts of system resources.  Malicious
00071  * use of such documents could be used to launch a denial-of-service
00072  * attack against a system running the parser.  Initially, the
00073  * SecurityManager only knows about attacks that can result from
00074  * exponential entity expansion; this is the only known attack that
00075  * involves processing a single XML document.  Other, simlar attacks
00076  * can be launched if arbitrary schemas may be parsed; there already
00077  * exist means (via use of the EntityResolver interface) by which
00078  * applications can deny processing of untrusted schemas.  In future,
00079  * the SecurityManager will be expanded to take these other exploits
00080  * into account.
00081  *
00082  * Add support for the SecurityManager
00083  * 
00084  * Revision 1.21  2003/03/07 18:09:17  tng
00085  * Return a reference instead of void for operator=
00086  *
00087  * Revision 1.20  2003/02/04 19:27:43  knoaman
00088  * Performance: use global buffer to eliminate repetitive memory creation/deletion.
00089  *
00090  * Revision 1.19  2003/01/09 19:07:08  tng
00091  * [Bug 15802] Add "const" qualifier to getURIText.
00092  *
00093  * Revision 1.18  2003/01/03 20:09:36  tng
00094  * New feature StandardUriConformant to force strict standard uri conformance.
00095  *
00096  * Revision 1.17  2002/12/30 20:15:51  knoaman
00097  * Make calculate src offset option false by default.
00098  *
00099  * Revision 1.16  2002/12/23 15:23:18  knoaman
00100  * Added a public api to various parsers to return the src offset within the input
00101  * source.
00102  *
00103  * Revision 1.15  2002/12/04 01:57:09  knoaman
00104  * Scanner re-organization.
00105  *
00106  * Revision 1.14  2002/11/04 14:57:03  tng
00107  * C++ Namespace Support.
00108  *
00109  * Revision 1.13  2002/08/14 15:20:38  knoaman
00110  * [Bug 3111] Problem with LexicalHandler::startDTD() and LexicalHandler::endDTD().
00111  *
00112  * Revision 1.12  2002/07/11 18:27:03  knoaman
00113  * Grammar caching/preparsing - initial implementation.
00114  *
00115  * Revision 1.11  2002/06/27 18:48:04  tng
00116  * API Documentation Update and move getScanner as protected
00117  *
00118  * Revision 1.10  2002/06/17 15:41:44  tng
00119  * Update API Documentation
00120  *
00121  * Revision 1.9  2002/06/06 20:38:18  tng
00122  * Document Fix: document that the returned object from resolveEntity is owned by the parser
00123  *
00124  * Revision 1.8  2002/05/31 15:13:53  tng
00125  * Fix doxygen documentation.
00126  *
00127  * Revision 1.7  2002/05/30 16:39:06  knoaman
00128  * DOM L3 LS.
00129  *
00130  * Revision 1.6  2002/05/30 16:20:09  tng
00131  * Add feature to optionally ignore external DTD.
00132  *
00133  * Revision 1.5  2002/05/29 21:37:47  knoaman
00134  * Add baseURI to resolveEntity to support DOMInputSource.
00135  *
00136  * Revision 1.4  2002/05/28 20:44:14  tng
00137  * [Bug 9104] prefixes dissapearing when schema validation turned on.
00138  *
00139  * Revision 1.3  2002/05/27 18:39:21  tng
00140  * To get ready for 64 bit large file, use XMLSSize_t to represent line and column number.
00141  *
00142  * Revision 1.2  2002/02/20 18:17:01  tng
00143  * [Bug 5977] Warnings on generating apiDocs.
00144  *
00145  * Revision 1.1.1.1  2002/02/01 22:22:07  peiyongz
00146  * sane_include
00147  *
00148  * Revision 1.22  2001/12/05 22:09:02  tng
00149  * Update documentation for setExternalSchemaLocation and setExternalNoNamespaceSchemaLocation.
00150  *
00151  * Revision 1.21  2001/11/20 18:51:44  tng
00152  * Schema: schemaLocation and noNamespaceSchemaLocation to be specified outside the instance document.  New methods setExternalSchemaLocation and setExternalNoNamespaceSchemaLocation are added (for SAX2, two new properties are added).
00153  *
00154  * Revision 1.20  2001/08/01 19:11:02  tng
00155  * Add full schema constraint checking flag to the samples and the parser.
00156  *
00157  * Revision 1.19  2001/07/27 20:24:21  tng
00158  * put getScanner() back as they were there before, not to break existing apps.
00159  *
00160  * Revision 1.18  2001/07/16 12:52:09  tng
00161  * APIDocs fix: default for schema processing in DOMParser, IDOMParser, and SAXParser should be false.
00162  *
00163  * Revision 1.17  2001/06/23 14:13:16  tng
00164  * Remove getScanner from the Parser headers as this is not needed and Scanner is not internal class.
00165  *
00166  * Revision 1.16  2001/06/03 19:26:20  jberry
00167  * Add support for querying error count following parse; enables simple parse without requiring error handler.
00168  *
00169  * Revision 1.15  2001/05/11 13:26:22  tng
00170  * Copyright update.
00171  *
00172  * Revision 1.14  2001/05/03 19:09:25  knoaman
00173  * Support Warning/Error/FatalError messaging.
00174  * Validity constraints errors are treated as errors, with the ability by user to set
00175  * validity constraints as fatal errors.
00176  *
00177  * Revision 1.13  2001/03/30 16:46:57  tng
00178  * Schema: Use setDoSchema instead of setSchemaValidation which makes more sense.
00179  *
00180  * Revision 1.12  2001/03/21 21:56:09  tng
00181  * Schema: Add Schema Grammar, Schema Validator, and split the DTDValidator into DTDValidator, DTDScanner, and DTDGrammar.
00182  *
00183  * Revision 1.11  2001/02/15 15:56:29  tng
00184  * Schema: Add setSchemaValidation and getSchemaValidation for DOMParser and SAXParser.
00185  * Add feature "http://apache.org/xml/features/validation/schema" for SAX2XMLReader.
00186  * New data field  fSchemaValidation in XMLScanner as the flag.
00187  *
00188  * Revision 1.10  2001/01/12 21:23:41  tng
00189  * Documentation Enhancement: explain values of Val_Scheme
00190  *
00191  * Revision 1.9  2000/08/02 18:05:15  jpolast
00192  * changes required for sax2
00193  * (changed private members to protected)
00194  *
00195  * Revision 1.8  2000/04/12 22:58:30  roddey
00196  * Added support for 'auto validate' mode.
00197  *
00198  * Revision 1.7  2000/03/03 01:29:34  roddey
00199  * Added a scanReset()/parseReset() method to the scanner and
00200  * parsers, to allow for reset after early exit from a progressive parse.
00201  * Added calls to new Terminate() call to all of the samples. Improved
00202  * documentation in SAX and DOM parsers.
00203  *
00204  * Revision 1.6  2000/02/17 03:54:27  rahulj
00205  * Added some new getters to query the parser state and
00206  * clarified the documentation.
00207  *
00208  * Revision 1.5  2000/02/16 03:42:58  rahulj
00209  * Finished documenting the SAX Driver implementation.
00210  *
00211  * Revision 1.4  2000/02/15 04:47:37  rahulj
00212  * Documenting the SAXParser framework. Not done yet.
00213  *
00214  * Revision 1.3  2000/02/06 07:47:56  rahulj
00215  * Year 2K copyright swat.
00216  *
00217  * Revision 1.2  1999/12/15 19:57:48  roddey
00218  * Got rid of redundant 'const' on boolean return value. Some compilers choke
00219  * on this and its useless.
00220  *
00221  * Revision 1.1.1.1  1999/11/09 01:07:51  twl
00222  * Initial checkin
00223  *
00224  * Revision 1.6  1999/11/08 20:44:54  rahul
00225  * Swat for adding in Product name and CVS comment log variable.
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     //  Class types
00276     // -----------------------------------------------------------------------
00285     enum ValSchemes
00286     {
00287         Val_Never
00288         , Val_Always
00289         , Val_Auto
00290     };
00291 
00292 
00293     // -----------------------------------------------------------------------
00294     //  Constructors and Destructor
00295     // -----------------------------------------------------------------------
00303     SAXParser
00304     (
00305           XMLValidator* const  valToAdopt = 0
00306         , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
00307     );
00308 
00312     ~SAXParser();
00314 
00315 
00316     // -----------------------------------------------------------------------
00317     //  Getter Methods
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     //  Setter methods
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     //  Advanced document handler list maintenance methods
00894     // -----------------------------------------------------------------------
00895 
00911     void installAdvDocHandler(XMLDocumentHandler* const toInstall);
00912 
00922     bool removeAdvDocHandler(XMLDocumentHandler* const toRemove);
00924 
00925 
00926     // -----------------------------------------------------------------------
00927     //  Progressive scan methods
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     //  Grammar preparsing interface
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     //  Implementation of the SAX Parser interface
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     //  Implementation of the XMLDocumentHandler interface
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     //  Implementation of the XMLErrorReporter interface
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     //  Implementation of the XMLEntityHandler interface
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     //  Implementation of the Deprecated DocTypeHandler Interface
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     //  Deprecated Methods
01909     // -----------------------------------------------------------------------
01922     bool getDoValidation() const;
01923 
01937     void setDoValidation(const bool newState);
01939 
01940 
01941 protected :
01942     // -----------------------------------------------------------------------
01943     //  Protected Methods
01944     // -----------------------------------------------------------------------
01951     const XMLScanner& getScanner() const;
01952 
01953 
01954 private:
01955     // -----------------------------------------------------------------------
01956     //  Unimplemented constructors and operators
01957     // -----------------------------------------------------------------------
01958     SAXParser(const SAXParser&);
01959     SAXParser& operator=(const SAXParser&);
01960 
01961     // -----------------------------------------------------------------------
01962     //  Initialize/Cleanup methods
01963     // -----------------------------------------------------------------------
01964     void initialize();
01965     void cleanUp();
01966 
01967     // -----------------------------------------------------------------------
01968     //  Private data members
01969     //
01970     //  fAttrList
01971     //      A temporary implementation of the basic SAX attribute list
01972     //      interface. We use this one over and over on each startElement
01973     //      event to allow SAX-like access to the element attributes.
01974     //
01975     //  fDocHandler
01976     //      The installed SAX doc handler, if any. Null if none.
01977     //
01978     //  fDTDHandler
01979     //      The installed SAX DTD handler, if any. Null if none.
01980     //
01981     //  fElemDepth
01982     //      This is used to track the element nesting depth, so that we can
01983     //      know when we are inside content. This is so we can ignore char
01984     //      data outside of content.
01985     //
01986     //  fEntityResolver
01987     //      The installed SAX entity handler, if any. Null if none.
01988     //
01989     //  fErrorHandler
01990     //      The installed SAX error handler, if any. Null if none.
01991     //
01992     //  fAdvDHCount
01993     //  fAdvDHList
01994     //  fAdvDHListSize
01995     //      This is an array of pointers to XMLDocumentHandlers, which is
01996     //      how we see installed advanced document handlers. There will
01997     //      usually not be very many at all, so a simple array is used
01998     //      instead of a collection, for performance. It will grow if needed,
01999     //      but that is unlikely.
02000     //
02001     //      The count is how many handlers are currently installed. The size
02002     //      is how big the array itself is (for expansion purposes.) When
02003     //      count == size, is time to expand.
02004     //
02005     //  fParseInProgress
02006     //      This flag is set once a parse starts. It is used to prevent
02007     //      multiple entrance or reentrance of the parser.
02008     //
02009     //  fScanner
02010     //      The scanner being used by this parser. It is created internally
02011     //      during construction.
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 //  SAXParser: Getter methods
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


Copyright © 2000 The Apache Software Foundation. All Rights Reserved.