CreateDOMDocument.cpp
上传用户:zhuqijet
上传日期:2013-06-25
资源大小:10074k
文件大小:8k
源码类别:

词法分析

开发平台:

Visual C++

  1. /*
  2.  * The Apache Software License, Version 1.1
  3.  *
  4.  * Copyright (c) 1999-2001 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.  * $Id: CreateDOMDocument.cpp,v 1.15 2003/02/05 18:53:22 tng Exp $
  58.  */
  59. /*
  60.  * This sample illustrates how you can create a DOM tree in memory.
  61.  * It then prints the count of elements in the tree.
  62.  */
  63. // ---------------------------------------------------------------------------
  64. //  Includes
  65. // ---------------------------------------------------------------------------
  66. #include <xercesc/util/PlatformUtils.hpp>
  67. #include <xercesc/util/XMLString.hpp>
  68. #include <xercesc/dom/DOM.hpp>
  69. #include <iostream.h>
  70. XERCES_CPP_NAMESPACE_USE
  71. // ---------------------------------------------------------------------------
  72. //  This is a simple class that lets us do easy (though not terribly efficient)
  73. //  trancoding of char* data to XMLCh data.
  74. // ---------------------------------------------------------------------------
  75. class XStr
  76. {
  77. public :
  78.     // -----------------------------------------------------------------------
  79.     //  Constructors and Destructor
  80.     // -----------------------------------------------------------------------
  81.     XStr(const char* const toTranscode)
  82.     {
  83.         // Call the private transcoding method
  84.         fUnicodeForm = XMLString::transcode(toTranscode);
  85.     }
  86.     ~XStr()
  87.     {
  88.         XMLString::release(&fUnicodeForm);
  89.     }
  90.     // -----------------------------------------------------------------------
  91.     //  Getter methods
  92.     // -----------------------------------------------------------------------
  93.     const XMLCh* unicodeForm() const
  94.     {
  95.         return fUnicodeForm;
  96.     }
  97. private :
  98.     // -----------------------------------------------------------------------
  99.     //  Private data members
  100.     //
  101.     //  fUnicodeForm
  102.     //      This is the Unicode XMLCh format of the string.
  103.     // -----------------------------------------------------------------------
  104.     XMLCh*   fUnicodeForm;
  105. };
  106. #define X(str) XStr(str).unicodeForm()
  107. // ---------------------------------------------------------------------------
  108. //  main
  109. // ---------------------------------------------------------------------------
  110. int main(int argC, char* argV[])
  111. {
  112.     // Initialize the XML4C2 system.
  113.     try
  114.     {
  115.         XMLPlatformUtils::Initialize();
  116.     }
  117.     catch(const XMLException& toCatch)
  118.     {
  119.         char *pMsg = XMLString::transcode(toCatch.getMessage());
  120.         cerr << "Error during Xerces-c Initialization.n"
  121.              << "  Exception message:"
  122.              << pMsg;
  123.         XMLString::release(&pMsg);
  124.         return 1;
  125.     }
  126.     // Watch for special case help request
  127.     if (argC > 1)
  128.     {
  129.         cout << "nUsage:n"
  130.                 "    CreateDOMDocumentnn"
  131.                 "This program creates a new DOM document from scratch in memory.n"
  132.                 "It then prints the count of elements in the tree.n"
  133.              <<  endl;
  134.         XMLPlatformUtils::Terminate();
  135.         return 1;
  136.     }
  137.     {
  138.         //  Nest entire test in an inner block.
  139.         //  The tree we create below is the same that the XercesDOMParser would
  140.         //  have created, except that no whitespace text nodes would be created.
  141.         // <company>
  142.         //     <product>Xerces-C</product>
  143.         //     <category idea='great'>XML Parsing Tools</category>
  144.         //     <developedBy>Apache Software Foundation</developedBy>
  145.         // </company>
  146.         DOMImplementation* impl =  DOMImplementationRegistry::getDOMImplementation(X("Core"));
  147.         DOMDocument* doc = impl->createDocument(
  148.                     0,                    // root element namespace URI.
  149.                     X("company"),         // root element name
  150.                     0);                   // document type object (DTD).
  151.         DOMElement* rootElem = doc->getDocumentElement();
  152.         DOMElement*  prodElem = doc->createElement(X("product"));
  153.         rootElem->appendChild(prodElem);
  154.         DOMText*    prodDataVal = doc->createTextNode(X("Xerces-C"));
  155.         prodElem->appendChild(prodDataVal);
  156.         DOMElement*  catElem = doc->createElement(X("category"));
  157.         rootElem->appendChild(catElem);
  158.         catElem->setAttribute(X("idea"), X("great"));
  159.         DOMText*    catDataVal = doc->createTextNode(X("XML Parsing Tools"));
  160.         catElem->appendChild(catDataVal);
  161.         DOMElement*  devByElem = doc->createElement(X("developedBy"));
  162.         rootElem->appendChild(devByElem);
  163.         DOMText*    devByDataVal = doc->createTextNode(X("Apache Software Foundation"));
  164.         devByElem->appendChild(devByDataVal);
  165.         //
  166.         // Now count the number of elements in the above DOM tree.
  167.         //
  168.         unsigned int elementCount = doc->getElementsByTagName(X("*"))->getLength();
  169.         cout << "The tree just created contains: " << elementCount
  170.              << " elements." << endl;
  171.         doc->release();
  172.    }
  173.     XMLPlatformUtils::Terminate();
  174.     return 0;
  175. }