domwriterimpl.cpp
来自「IBM的解析xml的工具Xerces的源代码」· C++ 代码 · 共 1,852 行 · 第 1/5 页
CPP
1,852 行
/* * Copyright 2002-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *//* * $Id: DOMWriterImpl.cpp,v 1.55 2004/09/08 13:55:52 peiyongz Exp $ * $Log: DOMWriterImpl.cpp,v $ * Revision 1.55 2004/09/08 13:55:52 peiyongz * Apache License Version 2.0 * * Revision 1.54 2004/07/06 15:16:57 amassari * Fix for jira#1238: DOMWriter was creating an XMLFormatter without propagating the memory manager * * Revision 1.53 2004/05/10 08:03:25 amassari * Performance: push a new map on the namespace stack only when an element has a xmlns attribute * * Revision 1.52 2004/04/01 22:05:32 peiyongz * invoke DOMException with Memory Manager * * Revision 1.51 2004/01/29 11:44:27 cargilld * Code cleanup changes to get rid of various compiler diagnostic messages. * * Revision 1.50 2004/01/20 23:23:57 peiyongz * patch to Bug#25751 * * Revision 1.49 2004/01/13 20:47:42 knoaman * Remove unnecessary local static data * * Revision 1.48 2004/01/13 16:34:20 cargilld * Misc memory management changes. * * Revision 1.47 2003/12/17 00:18:33 cargilld * Update to memory management so that the static memory manager (one used to call Initialize) is only for static data. * * Revision 1.46 2003/11/24 19:52:22 neilg * fix a typo * * Revision 1.45 2003/11/24 12:27:57 gareth * added in support for xml-declaration feature. * * Revision 1.44 2003/11/24 11:10:58 gareth * Fix for bug 22917. Patch by Adam Heinz . * * Revision 1.43 2003/11/10 17:52:58 amassari * Fixed memory leak * * Revision 1.42 2003/10/01 16:32:37 neilg * improve handling of out of memory conditions, bug #23415. Thanks to David Cargill. * * Revision 1.41 2003/08/14 16:31:13 gareth * Method added to allow serilization of custom nodes from derived classes. * * Revision 1.40 2003/08/12 12:46:57 gareth * Added serialization for attribute nodes. Patch by Caroline Rioux. * * Revision 1.39 2003/05/18 14:02:03 knoaman * Memory manager implementation: pass per instance manager. * * Revision 1.38 2003/05/16 21:36:55 knoaman * Memory manager implementation: Modify constructors to pass in the memory manager. * * Revision 1.37 2003/05/15 18:25:54 knoaman * Partial implementation of the configurable memory manager. * * Revision 1.36 2003/05/14 16:20:13 gareth * Fix to problem with multiple default namespace attributes being serialized. Patch by Alberto Massari. * * Revision 1.35 2003/05/12 16:08:11 gareth * fix to #18832. Corrected serilization with regards to namespace nodes. Patch by Alby Massari. * * Revision 1.34 2003/05/06 13:48:35 neilg * fix GCC compilation problem and incorrect #include * * Revision 1.33 2003/05/05 21:23:21 neilg * use of the new DOMNodeSPtr typedef and its friends to enable reference counting in * the DOMWriter implementation for applications that require it. * * Revision 1.32 2003/04/02 03:14:42 peiyongz * Bug#18594: DOMWriter does not recognize Document Fragment * * Revision 1.31 2003/03/16 05:42:04 peiyongz * Bug#17983 Formatter does not escape control characters * * Revision 1.30 2003/02/25 16:07:37 tng * [Bug 13493] Use const on static data in DOMWriterImpl.cpp. * * Revision 1.29 2003/01/28 18:31:47 peiyongz * Bug#13694: Allow Xerces to write the BOM to XML files * * Revision 1.28 2003/01/24 20:21:46 tng * DOMWriter: Call XMLFormatTarget::flush when done. * * Revision 1.27 2003/01/20 16:50:13 tng * DOMWriter fix: * 1. wrong wrong nested cdata message * 2. pretty format the cdata section * 3. do not increment error count if warning was issued * * Revision 1.26 2003/01/09 19:53:45 tng * [Bug 15372] DOMBuilder::parseFromURI ignores result of handleErrors. * * Revision 1.25 2002/12/10 21:01:32 tng * NLS: DOMWriter should use message loader to load message instead of using hardcoded static stirng * * Revision 1.24 2002/12/10 18:59:14 tng * pretty format print: consistent newline * * Revision 1.23 2002/12/10 13:34:07 tng * Pretty-format print: also indent PI/comment that appear inside the root element. * * Revision 1.22 2002/12/09 11:46:08 gareth * More pretty pretty print feature. Patch by Kevin King. Closes bug #13840. * * Revision 1.21 2002/12/02 23:08:09 peiyongz * fix to bug#14528: output n+1 cdatasection * * Revision 1.20 2002/11/13 21:51:22 peiyongz * fix to Bug#14528 * * Revision 1.19 2002/11/04 15:07:35 tng * C++ Namespace Support. * * Revision 1.18 2002/10/03 18:13:38 peiyongz * Bug#12560 Use const in DOMWriter - patch from Duncan Stodart * (Duncan_Stodart@insession.com ) * * Revision 1.17 2002/09/24 20:19:14 tng * Performance: use XMLString::equals instead of XMLString::compareString * and check for null string directly isntead of calling XMLString::stringLen * * Revision 1.16 2002/09/09 15:42:14 peiyongz * Patch to Bug#12369: invalid output from DOMWriter using MemBufFormatTarget * * Revision 1.15 2002/08/07 18:10:19 peiyongz * Fix to Bug#11534: Wrong CDATA Terminator in DOMWriterImpl * * Revision 1.14 2002/07/22 23:24:01 tng * DOM L3: writeToString should use the fFormatter to do the transcoding * * Revision 1.13 2002/07/16 15:19:42 peiyongz * check lenght of getEncoding()/getActualEncoding() * * Revision 1.12 2002/06/25 16:17:16 tng * DOM L3: add release() * * Revision 1.11 2002/06/21 19:33:12 peiyongz * support for feature split_cdata_section and entities revised. * * Revision 1.10 2002/06/18 15:35:25 peiyongz * Bug#9950: Compilation error on MSVC5, patch from PeterV@ti.com.od.ua (Peter A. Volchek) * * Revision 1.9 2002/06/17 19:45:58 peiyongz * optimization on fFeatures and featureId introduced * * Revision 1.8 2002/06/11 19:45:45 peiyongz * Notify application of the XMLFormatter creation failure * * Revision 1.7 2002/06/10 16:02:21 peiyongz * format-pretty-print partially supported * resolve encoding from DOMDocument Interface * * Revision 1.6 2002/06/06 20:58:37 tng * [Bug 9639] enum_mem in DOMError clashes with constant. * * Revision 1.5 2002/06/05 16:03:03 peiyongz * delete[] used. * * Revision 1.4 2002/06/03 22:35:54 peiyongz * constants changed * * Revision 1.3 2002/05/31 21:01:06 peiyongz * move printing of XMLDecl into the processNode(). * * Revision 1.2 2002/05/29 21:31:50 knoaman * DOM L3 LS: DOMInputSource, DOMEntityResolver, DOMImplementationLS and DOMBuilder * * Revision 1.1 2002/05/28 22:39:39 peiyongz * DOM3 Save Interface: DOMWriter/DOMWriterFilter * */#include "DOMWriterImpl.hpp"#include "DOMErrorImpl.hpp"#include "DOMLocatorImpl.hpp"#include "DOMImplementationImpl.hpp"#include <xercesc/framework/MemBufFormatTarget.hpp>#include <xercesc/util/TransService.hpp>#include <xercesc/util/TranscodingException.hpp>#include <xercesc/util/Janitor.hpp>#include <xercesc/util/XMLString.hpp>#include <xercesc/util/XMLUniDefs.hpp>#include <xercesc/util/XMLMsgLoader.hpp>#include <xercesc/dom/StDOMNode.hpp>#include <xercesc/util/OutOfMemoryException.hpp>XERCES_CPP_NAMESPACE_BEGIN// ---------------------------------------------------------------------------// Local const data//// ---------------------------------------------------------------------------static const int INVALID_FEATURE_ID = -1;static const int CANONICAL_FORM_ID = 0x0;static const int DISCARD_DEFAULT_CONTENT_ID = 0x1;static const int ENTITIES_ID = 0x2;static const int FORMAT_PRETTY_PRINT_ID = 0x3;static const int NORMALIZE_CHARACTERS_ID = 0x4;static const int SPLIT_CDATA_SECTIONS_ID = 0x5;static const int VALIDATION_ID = 0x6;static const int WHITESPACE_IN_ELEMENT_CONTENT_ID = 0x7;static const int BYTE_ORDER_MARK_ID = 0x8;static const int XML_DECLARATION = 0x9;// feature true false// ================================================================================//canonical-form [optional] Not Supported [required] (default)//discard-default-content [required] (default) [required]//entity [required] (default) [optional]//format-pretty-print [optional] Partially Supported [required] (default)//normalize-characters [optional] Not Supported [required] (default)//split-cdata-sections [required] (default) [required]//validation [optional] Not Supported [required] (default)//whitespace-in-element-content [requierd] (default) [optional] Not Supported////// Each feature has 2 entries in this array,// the first for "true",// the second for "false".//static const bool featuresSupported[] = { false, true, // canonical-form true, true, // discard-default-content true, true, // entity true, true, // format-pretty-print false, true, // normalize-characters true, true, // split-cdata-sections false, true, // validation true, false, // whitespace-in-element-content true, true, // byte-order-mark true, true // xml-declaration};// default end-of-line sequencestatic const XMLCh gEOLSeq[] ={ chLF, chNull};//UTF-8static const XMLCh gUTF8[] ={ chLatin_U, chLatin_T, chLatin_F, chDash, chDigit_8, chNull};//</static const XMLCh gEndElement[] ={ chOpenAngle, chForwardSlash, chNull};//?>static const XMLCh gEndPI[] ={ chQuestion, chCloseAngle, chNull};//<?static const XMLCh gStartPI[] ={ chOpenAngle, chQuestion, chNull};//<?xml version="static const XMLCh gXMLDecl_VersionInfo[] ={ chOpenAngle, chQuestion, chLatin_x, chLatin_m, chLatin_l, chSpace, chLatin_v, chLatin_e, chLatin_r, chLatin_s, chLatin_i, chLatin_o, chLatin_n, chEqual, chDoubleQuote, chNull};static const XMLCh gXMLDecl_ver10[] ={ chDigit_1, chPeriod, chDigit_0, chNull};//encoding="static const XMLCh gXMLDecl_EncodingDecl[] ={ chLatin_e, chLatin_n, chLatin_c, chLatin_o, chLatin_d, chLatin_i, chLatin_n, chLatin_g, chEqual, chDoubleQuote, chNull};//" standalone="static const XMLCh gXMLDecl_SDDecl[] ={ chLatin_s, chLatin_t, chLatin_a, chLatin_n, chLatin_d, chLatin_a, chLatin_l, chLatin_o, chLatin_n, chLatin_e, chEqual, chDoubleQuote, chNull};//"static const XMLCh gXMLDecl_separator[] ={ chDoubleQuote, chSpace, chNull};//?>static const XMLCh gXMLDecl_endtag[] ={ chQuestion, chCloseAngle, chNull};//<![CDATA[static const XMLCh gStartCDATA[] ={ chOpenAngle, chBang, chOpenSquare, chLatin_C, chLatin_D, chLatin_A, chLatin_T, chLatin_A, chOpenSquare, chNull};//]]>static const XMLCh gEndCDATA[] ={// chCloseSquare, chCloseAngle, chCloseAngle, chNull // test only: ]>> chCloseSquare, chCloseSquare, chCloseAngle, chNull};static const int offset = XMLString::stringLen(gEndCDATA);//<!--static const XMLCh gStartComment[] ={ chOpenAngle, chBang, chDash, chDash, chNull};//-->static const XMLCh gEndComment[] ={ chDash, chDash, chCloseAngle, chNull};//<!DOCTYPEstatic const XMLCh gStartDoctype[] ={ chOpenAngle, chBang, chLatin_D, chLatin_O, chLatin_C, chLatin_T, chLatin_Y, chLatin_P, chLatin_E, chSpace, chNull};//PUBLIC "static const XMLCh gPublic[] ={ chLatin_P, chLatin_U, chLatin_B, chLatin_L, chLatin_I, chLatin_C, chSpace, chDoubleQuote, chNull};
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?