DocumentParser.hpp
上传用户:xqtpzdz
上传日期:2022-05-21
资源大小:1764k
文件大小:6k
源码类别:

xml/soap/webservice

开发平台:

Visual C++

  1. /****************License************************************************
  2.  * Vocalocity OpenVXI
  3.  * Copyright (C) 2004-2005 by Vocalocity, Inc. All Rights Reserved.
  4.  * This program is free software; you can redistribute it and/or
  5.  * modify it under the terms of the GNU General Public License
  6.  * as published by the Free Software Foundation; either version 2
  7.  * of the License, or (at your option) any later version.
  8.  *  
  9.  * This program is distributed in the hope that it will be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  * GNU General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU General Public License
  15.  * along with this program; if not, write to the Free Software
  16.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  17.  * Vocalocity, the Vocalocity logo, and VocalOS are trademarks or 
  18.  * registered trademarks of Vocalocity, Inc. 
  19.  * OpenVXI is a trademark of Scansoft, Inc. and used under license 
  20.  * by Vocalocity.
  21.  ***********************************************************************/
  22. #ifndef HAVE_XERCES
  23. #error Need Apache Xerces to build the VoiceXML interpreter
  24. #endif
  25. #include <sax2/SAX2XMLReader.hpp>
  26. #include <framework/XMLDocumentHandler.hpp>
  27. #include <xercesc/dom/DOMBuilder.hpp>
  28. #include <xercesc/dom/DOMDocument.hpp>
  29. using namespace xercesc;
  30. #include "VXIvalue.h"
  31. #include <list>
  32. class DocumentConverter;
  33. class VXMLDocument;
  34. class SimpleLogger;
  35. extern "C" struct VXIcacheInterface;
  36. extern "C" struct VXIinetInterface;
  37. class DocumentParser : private XMLDocumentHandler {
  38. public:
  39.   // One time initialization of DocumentParser interface.
  40.   //
  41.   // Returns: True - initialization succeeded.
  42.   //          False - initialization failed.
  43.   static bool Initialize(unsigned int cacheSize);
  44.   // One time cleanup of DocumentParser interface.
  45.   static void Deinitialize();
  46.   DocumentParser();   // May throw VXIException::OutOfMemory
  47.   virtual ~DocumentParser();
  48. public:
  49.   // This retrieves a given URI and converts its contents into a VXMLElement
  50.   // tree.  The returned 'document' will contain only the contents of the
  51.   // <vxml> section.  Thus, only documents containing <vxml> are supported.
  52.   //
  53.   // Returns: -1 Out of memory?
  54.   //           0 Success
  55.   //           1 Invalid parameter
  56.   //           2 Unable to open URI
  57.   //           3 Unable to read from URI
  58.   //           4 Unable to parse contents of URI
  59.   int FetchDocument(const VXIchar * uri, const VXIMapHolder & properties,
  60.                     VXIinetInterface * inet, VXIcacheInterface * cache,
  61.                     SimpleLogger & log, VXMLDocument & document,
  62.                     VXIMapHolder & docProperties, 
  63.                     bool isDefaults = false, bool isRootApp = false,
  64.                     VXIbyte **content = NULL, VXIulong *size = 0);
  65.   // Returns: -1 Out of memory?
  66.   //           0 Success
  67.   //           1 Invalid parameter
  68.   //           2 Unable to open URI
  69.   //           3 Unable to read from URI
  70.   //           4 Unable to parse contents of URI
  71.   int FetchXML(const VXIchar * uri, const VXIMapHolder & fetchobj,
  72.                       VXIMapHolder & fetchStatus, 
  73.   VXIinetInterface * inet, SimpleLogger & log,
  74.   DOMDocument **doc );
  75.   // Returns: -1 Out of memory?
  76.   //           0 Success
  77.   //           1 Invalid parameter, such as unsupported encoding
  78.   //           2 Unable to open URI
  79.   //           3 Unable to read from URI
  80.   static int FetchContent(const VXIchar * uri, const VXIMapHolder & properties,
  81.                           VXIMapHolder & fetchInfo,
  82.                           VXIinetInterface * inet, SimpleLogger & log,
  83.                           const vxistring & encoding, vxistring & content);
  84. private:
  85.   // FetchBuffer will create a memory buffer containing the contents of the
  86.   // URI.  ReleaseBuffer must be called by the consumer to cleanup this memory.
  87.   //
  88.   // Returns: -1 Out of memory?
  89.   //           0 Success
  90.   //           1 Invalid parameter
  91.   //           2 Unable to open URI
  92.   //           3 Unable to read from URI
  93.   //           4 Unsupported encoding
  94.   static int FetchBuffer(const VXIchar * uri, const VXIMapHolder & properties,
  95.                          VXIMapHolder & fetchStatus,
  96.                          VXIinetInterface * inet, SimpleLogger & log,
  97.                          const VXIbyte * & buffer, VXIulong & bufferSize,
  98.                          vxistring & docURI);
  99.   static void ReleaseBuffer(const VXIbyte * & buffer);
  100.   virtual void docCharacters
  101.   (
  102.       const   XMLCh* const    chars
  103.       , const unsigned int    length
  104.       , const bool            cdataSection
  105.   ){}
  106.   virtual void docComment( const XMLCh* const comment ){}
  107.   virtual void docPI
  108.   (
  109.       const   XMLCh* const    target
  110.       , const XMLCh* const    data
  111.   ){}
  112.   virtual void endDocument(){}
  113.   virtual void endElement
  114.   (
  115.       const   XMLElementDecl& elemDecl
  116.       , const unsigned int    uriId
  117.       , const bool            isRoot
  118.       , const XMLCh* const    prefixName = 0
  119.   ){}
  120.   virtual void endEntityReference
  121.   (
  122.       const   XMLEntityDecl&  entDecl
  123.   ){}
  124.   virtual void ignorableWhitespace
  125.   (
  126.       const   XMLCh* const    chars
  127.       , const unsigned int    length
  128.       , const bool            cdataSection
  129.   ){}
  130.   virtual void resetDocument(){ encoding.clear(); }
  131.   virtual void startDocument(){}
  132.   virtual void startElement
  133.   (
  134.       const   XMLElementDecl&         elemDecl
  135.       , const unsigned int            uriId
  136.       , const XMLCh* const            prefixName
  137.       , const RefVectorOf<XMLAttr>&   attrList
  138.       , const unsigned int            attrCount
  139.       , const bool                    isEmpty
  140.       , const bool                    isRoot
  141.   ){}
  142.   virtual void startEntityReference(const XMLEntityDecl& entDecl){}
  143.   virtual void XMLDecl
  144.   (
  145.       const   XMLCh* const    versionStr
  146.       , const XMLCh* const    encodingStr
  147.       , const XMLCh* const    standaloneStr
  148.       , const XMLCh* const    autoEncodingStr
  149.   );
  150. private:
  151.   xercesc::SAX2XMLReader * parser;
  152.   std::list<xercesc::DOMBuilder *> domParsers;
  153.   DocumentConverter * converter;
  154.   bool loadedVXML20;
  155.   vxistring encoding;
  156. };