ContentHandler.hpp
上传用户:huihehuasu
上传日期:2007-01-10
资源大小:6948k
文件大小:15k
源码类别:

xml/soap/webservice

开发平台:

C/C++

  1. /*
  2.  * The Apache Software License, Version 1.1
  3.  * 
  4.  * Copyright (c) 1999-2000 The Apache Software Foundation.  All rights
  5.  * reserved.
  6.  * 
  7.  * Redistribution and use in source and binary forms, with or without
  8.  * modification, are permitted provided that the following conditions
  9.  * are met:
  10.  * 
  11.  * 1. Redistributions of source code must retain the above copyright
  12.  *    notice, this list of conditions and the following disclaimer. 
  13.  * 
  14.  * 2. Redistributions in binary form must reproduce the above copyright
  15.  *    notice, this list of conditions and the following disclaimer in
  16.  *    the documentation and/or other materials provided with the
  17.  *    distribution.
  18.  * 
  19.  * 3. The end-user documentation included with the redistribution,
  20.  *    if any, must include the following acknowledgment:  
  21.  *       "This product includes software developed by the
  22.  *        Apache Software Foundation (http://www.apache.org/)."
  23.  *    Alternately, this acknowledgment may appear in the software itself,
  24.  *    if and wherever such third-party acknowledgments normally appear.
  25.  * 
  26.  * 4. The names "Xerces" and "Apache Software Foundation" must
  27.  *    not be used to endorse or promote products derived from this
  28.  *    software without prior written permission. For written 
  29.  *    permission, please contact apache@apache.org.
  30.  * 
  31.  * 5. Products derived from this software may not be called "Apache",
  32.  *    nor may "Apache" appear in their name, without prior written
  33.  *    permission of the Apache Software Foundation.
  34.  * 
  35.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  36.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  37.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  38.  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  39.  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  40.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  41.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  42.  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  43.  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  44.  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  45.  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  46.  * SUCH DAMAGE.
  47.  * ====================================================================
  48.  * 
  49.  * This software consists of voluntary contributions made by many
  50.  * individuals on behalf of the Apache Software Foundation, and was
  51.  * originally based on software copyright (c) 1999, International
  52.  * Business Machines, Inc., http://www.ibm.com .  For more information
  53.  * on the Apache Software Foundation, please see
  54.  * <http://www.apache.org/>.
  55.  */
  56. /*
  57.  * $Log: ContentHandler.hpp,v $
  58.  * Revision 1.4  2000/12/14 18:50:05  tng
  59.  * Fix API document generation warning: "Warning: end of member group without matching begin"
  60.  *
  61.  * Revision 1.3  2000/08/09 22:19:29  jpolast
  62.  * many conformance & stability changes:
  63.  *   - ContentHandler::resetDocument() removed
  64.  *   - attrs param of ContentHandler::startDocument() made const
  65.  *   - SAXExceptions thrown now have msgs
  66.  *   - removed duplicate function signatures that had 'const'
  67.  *       [ eg: getContentHander() ]
  68.  *   - changed getFeature and getProperty to apply to const objs
  69.  *   - setProperty now takes a void* instead of const void*
  70.  *   - SAX2XMLReaderImpl does not inherit from SAXParser anymore
  71.  *   - Reuse Validator (http://apache.org/xml/features/reuse-validator) implemented
  72.  *   - Features & Properties now read-only during parse
  73.  *
  74.  * Revision 1.2  2000/08/07 18:21:27  jpolast
  75.  * change SAX_EXPORT module to SAX2_EXPORT
  76.  *
  77.  * Revision 1.1  2000/08/02 18:02:34  jpolast
  78.  * initial checkin of sax2 implementation
  79.  * submitted by Simon Fell (simon@fell.com)
  80.  * and Joe Polastre (jpolast@apache.org)
  81.  *
  82.  *
  83.  */
  84. #ifndef CONTENTHANDLER_HPP
  85. #define CONTENTHANDLER_HPP
  86. #include <util/XercesDefs.hpp>
  87. class Attributes;
  88. class Locator;
  89. /**
  90.   * Receive notification of general document events.
  91.   *
  92.   * <p>This is the main interface that most SAX2 applications
  93.   * implement: if the application needs to be informed of basic parsing 
  94.   * events, it implements this interface and registers an instance with 
  95.   * the SAX2 parser using the setDocumentHandler method.  The parser 
  96.   * uses the instance to report basic document-related events like
  97.   * the start and end of elements and character data.</p>
  98.   *
  99.   * <p>The order of events in this interface is very important, and
  100.   * mirrors the order of information in the document itself.  For
  101.   * example, all of an element's content (character data, processing
  102.   * instructions, and/or subelements) will appear, in order, between
  103.   * the startElement event and the corresponding endElement event.</p>
  104.   *
  105.   * <p>Application writers who do not want to implement the entire
  106.   * interface while can derive a class from Sax2HandlerBase, which implements
  107.   * the default functionality; parser writers can instantiate
  108.   * Sax2HandlerBase to obtain a default handler.  The application can find
  109.   * the location of any document event using the Locator interface
  110.   * supplied by the Parser through the setDocumentLocator method.</p>
  111.   *
  112.   * @see Parser#setDocumentHandler
  113.   * @see Locator#Locator
  114.   * @see Sax2HandlerBase#Sax2HandlerBase
  115.   */
  116. class SAX2_EXPORT ContentHandler
  117. {
  118. public:
  119.     /** @name Constructors and Destructor */
  120.     //@{
  121.     /** Default constructor */
  122.     ContentHandler()
  123.     {
  124.     }
  125.     /** Destructor */
  126.     virtual ~ContentHandler()
  127.     {
  128.     }
  129.     //@}
  130.     /** @name The virtual document handler interface */
  131.     
  132.     //@{
  133.    /**
  134.     * Receive notification of character data.
  135.     *
  136.     * <p>The Parser will call this method to report each chunk of
  137.     * character data.  SAX parsers may return all contiguous character
  138.     * data in a single chunk, or they may split it into several
  139.     * chunks; however, all of the characters in any single event
  140.     * must come from the same external entity, so that the Locator
  141.     * provides useful information.</p>
  142.     *
  143.     * <p>The application must not attempt to read from the array
  144.     * outside of the specified range.</p>
  145.     *
  146.     * <p>Note that some parsers will report whitespace using the
  147.     * ignorableWhitespace() method rather than this one (validating
  148.     * parsers must do so).</p>
  149.     *
  150.     * @param chars The characters from the XML document.
  151.     * @param length The number of characters to read from the array.
  152.     * @exception SAXException Any SAX exception, possibly
  153.     *            wrapping another exception.
  154.     * @see #ignorableWhitespace 
  155.     * @see Locator#Locator
  156.     */
  157.     virtual void characters
  158.     (
  159.         const   XMLCh* const    chars
  160.         , const unsigned int    length
  161.     ) = 0;
  162.   /**
  163.     * Receive notification of the end of a document.
  164.     *
  165.     * <p>The SAX parser will invoke this method only once, and it will
  166.     * be the last method invoked during the parse.  The parser shall
  167.     * not invoke this method until it has either abandoned parsing
  168.     * (because of an unrecoverable error) or reached the end of
  169.     * input.</p>
  170.     *
  171.     * @exception SAXException Any SAX exception, possibly
  172.     *            wrapping another exception.
  173.     */
  174.     virtual void endDocument () = 0;
  175.   /**
  176.     * Receive notification of the end of an element.
  177.     *
  178.     * <p>The SAX parser will invoke this method at the end of every
  179.     * element in the XML document; there will be a corresponding
  180.     * startElement() event for every endElement() event (even when the
  181.     * element is empty).</p>
  182.     *
  183.     * @param uri The URI of the asscioated namespace for this element
  184. * @param localname The local part of the element name
  185. * @param qname The QName of this element
  186.     * @exception SAXException Any SAX exception, possibly
  187.     *            wrapping another exception.
  188.     */
  189.     virtual void endElement
  190. (
  191. const XMLCh* const uri, 
  192. const XMLCh* const localname, 
  193. const XMLCh* const qname
  194. ) = 0;
  195.   /**
  196.     * Receive notification of ignorable whitespace in element content.
  197.     *
  198.     * <p>Validating Parsers must use this method to report each chunk
  199.     * of ignorable whitespace (see the W3C XML 1.0 recommendation,
  200.     * section 2.10): non-validating parsers may also use this method
  201.     * if they are capable of parsing and using content models.</p>
  202.     *
  203.     * <p>SAX parsers may return all contiguous whitespace in a single
  204.     * chunk, or they may split it into several chunks; however, all of
  205.     * the characters in any single event must come from the same
  206.     * external entity, so that the Locator provides useful
  207.     * information.</p>
  208.     *
  209.     * <p>The application must not attempt to read from the array
  210.     * outside of the specified range.</p>
  211.     *
  212.     * @param chars The characters from the XML document.
  213.     * @param length The number of characters to read from the array.
  214.     * @exception SAXException Any SAX exception, possibly
  215.     *            wrapping another exception.
  216.     * @see #characters
  217.     */
  218.     virtual void ignorableWhitespace
  219.     (
  220.         const   XMLCh* const    chars
  221.         , const unsigned int    length
  222.     ) = 0;
  223.   /**
  224.     * Receive notification of a processing instruction.
  225.     *
  226.     * <p>The Parser will invoke this method once for each processing
  227.     * instruction found: note that processing instructions may occur
  228.     * before or after the main document element.</p>
  229.     *
  230.     * <p>A SAX parser should never report an XML declaration (XML 1.0,
  231.     * section 2.8) or a text declaration (XML 1.0, section 4.3.1)
  232.     * using this method.</p>
  233.     *
  234.     * @param target The processing instruction target.
  235.     * @param data The processing instruction data, or null if
  236.     *        none was supplied.
  237.     * @exception SAXException Any SAX exception, possibly
  238.     *            wrapping another exception.
  239.     */
  240.     virtual void processingInstruction
  241.     (
  242.         const   XMLCh* const    target
  243.         , const XMLCh* const    data
  244.     ) = 0;
  245.   /**
  246.     * Receive an object for locating the origin of SAX document events.
  247.     *
  248.     * SAX parsers are strongly encouraged (though not absolutely
  249.     * required) to supply a locator: if it does so, it must supply
  250.     * the locator to the application by invoking this method before
  251.     * invoking any of the other methods in the DocumentHandler
  252.     * interface.
  253.     *
  254.     * The locator allows the application to determine the end
  255.     * position of any document-related event, even if the parser is
  256.     * not reporting an error.  Typically, the application will
  257.     * use this information for reporting its own errors (such as
  258.     * character content that does not match an application's
  259.     * business rules). The information returned by the locator
  260.     * is probably not sufficient for use with a search engine.
  261.     *
  262.     * Note that the locator will return correct information only
  263.     * during the invocation of the events in this interface. The
  264.     * application should not attempt to use it at any other time.
  265.     *
  266.     * @param locator An object that can return the location of
  267.     *                any SAX document event. The object is only
  268.     *                'on loan' to the client code and they are not
  269.     *                to attempt to delete or modify it in any way!
  270.     *
  271.     * @see Locator#Locator
  272.     */
  273.     virtual void setDocumentLocator(const Locator* const locator) = 0;
  274.   /**
  275.     * Receive notification of the beginning of a document.
  276.     *
  277.     * <p>The SAX parser will invoke this method only once, before any
  278.     * other methods in this interface or in DTDHandler (except for
  279.     * setDocumentLocator).</p>
  280.     *
  281.     * @exception SAXException Any SAX exception, possibly
  282.     *            wrapping another exception.
  283.     */
  284.     virtual void startDocument() = 0;
  285.   /**
  286.     * Receive notification of the beginning of an element.
  287.     *
  288.     * <p>The Parser will invoke this method at the beginning of every
  289.     * element in the XML document; there will be a corresponding
  290.     * endElement() event for every startElement() event (even when the
  291.     * element is empty). All of the element's content will be
  292.     * reported, in order, before the corresponding endElement()
  293.     * event.</p>
  294.     *
  295.     * <p>Note that the attribute list provided will
  296.     * contain only attributes with explicit values (specified or
  297.     * defaulted): #IMPLIED attributes will be omitted.</p>
  298.     *
  299.     * @param uri The URI of the asscioated namespace for this element
  300. * @param localname The local part of the element name
  301. * @param qname The QName of this element
  302.     * @param attrs The attributes attached to the element, if any.
  303.     * @exception SAXException Any SAX exception, possibly
  304.     *            wrapping another exception.
  305.     * @see #endElement
  306.     * @see Attributes#Attributes
  307.     */
  308.     virtual void startElement
  309.     (
  310.         const   XMLCh* const    uri,
  311.         const   XMLCh* const    localname,
  312.         const   XMLCh* const    qname,
  313.         const   Attributes&     attrs
  314.     ) = 0;
  315.   /**
  316.     * Receive notification of the start of an namespace prefix mapping.
  317.     *
  318.     * <p>By default, do nothing.  Application writers may override this
  319.     * method in a subclass to take specific actions at the start of
  320.     * each namespace prefix mapping.</p>
  321.     *
  322.     * @param prefix The namespace prefix used
  323.     * @param uri The namespace URI used.
  324.     * @exception SAXException Any SAX exception, possibly
  325.     *            wrapping another exception.
  326.     */
  327. virtual void startPrefixMapping
  328. const XMLCh* const prefix,
  329. const XMLCh* const uri
  330. ) = 0 ;
  331.   /**
  332.     * Receive notification of the end of an namespace prefix mapping.
  333.     *
  334.     * <p>By default, do nothing.  Application writers may override this
  335.     * method in a subclass to take specific actions at the end of
  336.     * each namespace prefix mapping.</p>
  337.     *
  338.     * @param prefix The namespace prefix used
  339.     * @exception SAXException Any SAX exception, possibly
  340.     *            wrapping another exception.
  341.     */
  342. virtual void endPrefixMapping
  343. (
  344. const XMLCh* const prefix
  345. ) = 0 ;
  346.   /**
  347.     * Receive notification of a skipped entity
  348.     *
  349.     * <p>The parser will invoke this method once for each entity
  350. * skipped.  All processors may skip external entities,
  351. * depending on the values of the features:<br>
  352. * http://xml.org/sax/features/external-general-entities<br>
  353. * http://xml.org/sax/features/external-parameter-entities</p>
  354. *
  355. * <p>Note: Xerces (specifically) never skips any entities, regardless
  356. * of the above features.  This function is never called in the
  357. * Xerces implementation of SAX2.</p>
  358.     *
  359. * <p>Introduced with SAX2</p>
  360. *
  361.     * @param name The name of the skipped entity.  If it is a parameter entity, 
  362. * the name will begin with %, and if it is the external DTD subset, 
  363. * it will be the string [dtd].
  364.     * @exception SAXException Any SAX exception, possibly
  365.     *            wrapping another exception.
  366.     */
  367. virtual void skippedEntity
  368. (
  369. const XMLCh* const name
  370. ) = 0 ;
  371.     //@}
  372. private :
  373.     /* Unimplemented Constructors and operators */
  374.     /* Copy constructor */
  375.     ContentHandler(const ContentHandler&);
  376.     /** Assignment operator */
  377.     void operator=(const ContentHandler&);
  378. };
  379. #endif