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

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: DocumentHandler.hpp,v $
  58.  * Revision 1.6  2000/03/02 19:54:34  roddey
  59.  * This checkin includes many changes done while waiting for the
  60.  * 1.1.0 code to be finished. I can't list them all here, but a list is
  61.  * available elsewhere.
  62.  *
  63.  * Revision 1.5  2000/02/24 20:12:55  abagchi
  64.  * Swat for removing Log from API docs
  65.  *
  66.  * Revision 1.4  2000/02/12 03:31:55  rahulj
  67.  * Removed duplicate CVS Log entries.
  68.  *
  69.  * Revision 1.3  2000/02/12 01:27:19  aruna1
  70.  * Documentation updated
  71.  *
  72.  * Revision 1.2  2000/02/06 07:47:57  rahulj
  73.  * Year 2K copyright swat.
  74.  *
  75.  * Revision 1.1.1.1  1999/11/09 01:07:43  twl
  76.  * Initial checkin
  77.  *
  78.  * Revision 1.2  1999/11/08 20:44:54  rahul
  79.  * Swat for adding in Product name and CVS comment log variable.
  80.  *
  81.  */
  82. #ifndef DOCUMENTHANDLER_HPP
  83. #define DOCUMENTHANDLER_HPP
  84. #include <util/XercesDefs.hpp>
  85. class AttributeList;
  86. class Locator;
  87. /**
  88.   * Receive notification of general document events.
  89.   *
  90.   * <p>This is the main interface that most SAX applications
  91.   * implement: if the application needs to be informed of basic parsing 
  92.   * events, it implements this interface and registers an instance with 
  93.   * the SAX parser using the setDocumentHandler method.  The parser 
  94.   * uses the instance to report basic document-related events like
  95.   * the start and end of elements and character data.</p>
  96.   *
  97.   * <p>The order of events in this interface is very important, and
  98.   * mirrors the order of information in the document itself.  For
  99.   * example, all of an element's content (character data, processing
  100.   * instructions, and/or subelements) will appear, in order, between
  101.   * the startElement event and the corresponding endElement event.</p>
  102.   *
  103.   * <p>Application writers who do not want to implement the entire
  104.   * interface while can derive a class from HandlerBase, which implements
  105.   * the default functionality; parser writers can instantiate
  106.   * HandlerBase to obtain a default handler.  The application can find
  107.   * the location of any document event using the Locator interface
  108.   * supplied by the Parser through the setDocumentLocator method.</p>
  109.   *
  110.   * @see Parser#setDocumentHandler
  111.   * @see Locator#Locator
  112.   * @see HandlerBase#HandlerBase
  113.   */
  114. class SAX_EXPORT DocumentHandler
  115. {
  116. public:
  117.     /** @name Constructors and Destructor */
  118.     //@{
  119.     /** Default constructor */
  120.     DocumentHandler()
  121.     {
  122.     }
  123.     /** Destructor */
  124.     virtual ~DocumentHandler()
  125.     {
  126.     }
  127.     //@}
  128.     /** @name The virtual document handler interface */
  129.     
  130.     //@{
  131.    /**
  132.     * Receive notification of character data.
  133.     *
  134.     * <p>The Parser will call this method to report each chunk of
  135.     * character data.  SAX parsers may return all contiguous character
  136.     * data in a single chunk, or they may split it into several
  137.     * chunks; however, all of the characters in any single event
  138.     * must come from the same external entity, so that the Locator
  139.     * provides useful information.</p>
  140.     *
  141.     * <p>The application must not attempt to read from the array
  142.     * outside of the specified range.</p>
  143.     *
  144.     * <p>Note that some parsers will report whitespace using the
  145.     * ignorableWhitespace() method rather than this one (validating
  146.     * parsers must do so).</p>
  147.     *
  148.     * @param chars The characters from the XML document.
  149.     * @param length The number of characters to read from the array.
  150.     * @exception SAXException Any SAX exception, possibly
  151.     *            wrapping another exception.
  152.     * @see #ignorableWhitespace 
  153.     * @see Locator#Locator
  154.     */
  155.     virtual void characters
  156.     (
  157.         const   XMLCh* const    chars
  158.         , const unsigned int    length
  159.     ) = 0;
  160.   /**
  161.     * Receive notification of the end of a document.
  162.     *
  163.     * <p>The SAX parser will invoke this method only once, and it will
  164.     * be the last method invoked during the parse.  The parser shall
  165.     * not invoke this method until it has either abandoned parsing
  166.     * (because of an unrecoverable error) or reached the end of
  167.     * input.</p>
  168.     *
  169.     * @exception SAXException Any SAX exception, possibly
  170.     *            wrapping another exception.
  171.     */
  172.     virtual void endDocument () = 0;
  173.   /**
  174.     * Receive notification of the end of an element.
  175.     *
  176.     * <p>The SAX parser will invoke this method at the end of every
  177.     * element in the XML document; there will be a corresponding
  178.     * startElement() event for every endElement() event (even when the
  179.     * element is empty).</p>
  180.     *
  181.     * <p>If the element name has a namespace prefix, the prefix will
  182.     * still be attached to the name.</p>
  183.     *
  184.     * @param name The element type name
  185.     * @exception SAXException Any SAX exception, possibly
  186.     *            wrapping another exception.
  187.     */
  188.     virtual void endElement(const XMLCh* const name) = 0;
  189.   /**
  190.     * Receive notification of ignorable whitespace in element content.
  191.     *
  192.     * <p>Validating Parsers must use this method to report each chunk
  193.     * of ignorable whitespace (see the W3C XML 1.0 recommendation,
  194.     * section 2.10): non-validating parsers may also use this method
  195.     * if they are capable of parsing and using content models.</p>
  196.     *
  197.     * <p>SAX parsers may return all contiguous whitespace in a single
  198.     * chunk, or they may split it into several chunks; however, all of
  199.     * the characters in any single event must come from the same
  200.     * external entity, so that the Locator provides useful
  201.     * information.</p>
  202.     *
  203.     * <p>The application must not attempt to read from the array
  204.     * outside of the specified range.</p>
  205.     *
  206.     * @param chars The characters from the XML document.
  207.     * @param length The number of characters to read from the array.
  208.     * @exception SAXException Any SAX exception, possibly
  209.     *            wrapping another exception.
  210.     * @see #characters
  211.     */
  212.     virtual void ignorableWhitespace
  213.     (
  214.         const   XMLCh* const    chars
  215.         , const unsigned int    length
  216.     ) = 0;
  217.   /**
  218.     * Receive notification of a processing instruction.
  219.     *
  220.     * <p>The Parser will invoke this method once for each processing
  221.     * instruction found: note that processing instructions may occur
  222.     * before or after the main document element.</p>
  223.     *
  224.     * <p>A SAX parser should never report an XML declaration (XML 1.0,
  225.     * section 2.8) or a text declaration (XML 1.0, section 4.3.1)
  226.     * using this method.</p>
  227.     *
  228.     * @param target The processing instruction target.
  229.     * @param data The processing instruction data, or null if
  230.     *        none was supplied.
  231.     * @exception SAXException Any SAX exception, possibly
  232.     *            wrapping another exception.
  233.     */
  234.     virtual void processingInstruction
  235.     (
  236.         const   XMLCh* const    target
  237.         , const XMLCh* const    data
  238.     ) = 0;
  239.     /**
  240.     * Reset the Docuemnt object on its reuse
  241.     *
  242.     * <p>This method helps in reseting the document implementational
  243.     * defaults each time the document is begun.</p>
  244.     *
  245.     */
  246.     virtual void resetDocument() = 0;
  247.   /**
  248.     * Receive an object for locating the origin of SAX document events.
  249.     *
  250.     * SAX parsers are strongly encouraged (though not absolutely
  251.     * required) to supply a locator: if it does so, it must supply
  252.     * the locator to the application by invoking this method before
  253.     * invoking any of the other methods in the DocumentHandler
  254.     * interface.
  255.     *
  256.     * The locator allows the application to determine the end
  257.     * position of any document-related event, even if the parser is
  258.     * not reporting an error.  Typically, the application will
  259.     * use this information for reporting its own errors (such as
  260.     * character content that does not match an application's
  261.     * business rules). The information returned by the locator
  262.     * is probably not sufficient for use with a search engine.
  263.     *
  264.     * Note that the locator will return correct information only
  265.     * during the invocation of the events in this interface. The
  266.     * application should not attempt to use it at any other time.
  267.     *
  268.     * @param locator An object that can return the location of
  269.     *                any SAX document event. The object is only
  270.     *                'on loan' to the client code and they are not
  271.     *                to attempt to delete or modify it in any way!
  272.     *
  273.     * @see Locator#Locator
  274.     */
  275.     virtual void setDocumentLocator(const Locator* const locator) = 0;
  276.   /**
  277.     * Receive notification of the beginning of a document.
  278.     *
  279.     * <p>The SAX parser will invoke this method only once, before any
  280.     * other methods in this interface or in DTDHandler (except for
  281.     * setDocumentLocator).</p>
  282.     *
  283.     * @exception SAXException Any SAX exception, possibly
  284.     *            wrapping another exception.
  285.     */
  286.     virtual void startDocument() = 0;
  287.   /**
  288.     * Receive notification of the beginning of an element.
  289.     *
  290.     * <p>The Parser will invoke this method at the beginning of every
  291.     * element in the XML document; there will be a corresponding
  292.     * endElement() event for every startElement() event (even when the
  293.     * element is empty). All of the element's content will be
  294.     * reported, in order, before the corresponding endElement()
  295.     * event.</p>
  296.     *
  297.     * <p>If the element name has a namespace prefix, the prefix will
  298.     * still be attached.  Note that the attribute list provided will
  299.     * contain only attributes with explicit values (specified or
  300.     * defaulted): #IMPLIED attributes will be omitted.</p>
  301.     *
  302.     * @param name The element type name.
  303.     * @param attrs The attributes attached to the element, if any.
  304.     * @exception SAXException Any SAX exception, possibly
  305.     *            wrapping another exception.
  306.     * @see #endElement
  307.     * @see AttributeList#AttributeList 
  308.     */
  309.     virtual void startElement
  310.     (
  311.         const   XMLCh* const    name
  312.         ,       AttributeList&  attrs
  313.     ) = 0;
  314.     //@}
  315. private :
  316.     /* Unimplemented Constructors and operators */
  317.     /* Copy constructor */
  318.     DocumentHandler(const DocumentHandler&);
  319.     /** Assignment operator */
  320.     void operator=(const DocumentHandler&);
  321. };
  322. #endif