#ifndef DOMWriter_HEADER_GUARD_
#define DOMWriter_HEADER_GUARD_
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Xerces" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact apache\@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation, and was
* originally based on software copyright (c) 1999, International
* Business Machines, Inc., http://www.ibm.com . For more information
* on the Apache Software Foundation, please see
*
DOMWriter
accepts any node type for serialization. For
* nodes of type Document
or Entity
, well formed
* XML will be created if possible. The serialized output for these node
* types is either as a Document or an External Entity, respectively, and is
* acceptable input for an XML parser. For all other types of nodes the
* serialized form is not specified, but should be something useful to a
* human for debugging or diagnostic purposes. Note: rigorously designing an
* external (source) form for stand-alone node types that don't already have
* one defined in seems a bit much to take on here.
*
Within a Document or Entity being serialized, Nodes are processed as
* follows Documents are written including an XML declaration and a DTD
* subset, if one exists in the DOM. Writing a document node serializes the
* entire document. Entity nodes, when written directly by
* writeNode
defined in the DOMWriter
interface,
* output the entity expansion but no namespace fixup is done. The resulting
* output will be valid as an external entity. Entity References nodes are
* serializes as an entity reference of the form
* "&entityName;"
) in the output. Child nodes (the
* expansion) of the entity reference are ignored. CDATA sections
* containing content characters that can not be represented in the
* specified output encoding are handled according to the
* "split-cdata-sections" feature.If the feature is true
, CDATA
* sections are split, and the unrepresentable characters are serialized as
* numeric character references in ordinary content. The exact position and
* number of splits is not specified. If the feature is false
,
* unrepresentable characters in a CDATA section are reported as errors. The
* error is not recoverable - there is no mechanism for supplying
* alternative characters and continuing with the serialization. All other
* node types (DOMElement, DOMText, etc.) are serialized to their corresponding
* XML source form.
*
Within the character data of a document (outside of markup), any * characters that cannot be represented directly are replaced with * character references. Occurrences of '<' and '&' are replaced by * the predefined entities < and &. The other predefined * entities (>, &apos, etc.) are not used; these characters can be * included directly. Any character that can not be represented directly in * the output character encoding is serialized as a numeric character * reference. *
Attributes not containing quotes are serialized in quotes. Attributes * containing quotes but no apostrophes are serialized in apostrophes * (single quotes). Attributes containing both forms of quotes are * serialized in quotes, with quotes within the value represented by the * predefined entity ". Any character that can not be represented * directly in the output character encoding is serialized as a numeric * character reference. *
Within markup, but outside of attributes, any occurrence of a character * that cannot be represented in the output character encoding is reported * as an error. An example would be serializing the element * <LaCaņada/> with the encoding="us-ascii". *
When requested by setting the normalize-characters
feature
* on DOMWriter
, all data to be serialized, both markup and
* character data, is W3C Text normalized according to the rules defined in
* . The W3C Text normalization process affects only the data as it is being
* written; it does not alter the DOM's view of the document after
* serialization has completed.
*
Namespaces are fixed up during serialization, the serialization process * will verify that namespace declarations, namespace prefixes and the * namespace URIs associated with Elements and Attributes are consistent. If * inconsistencies are found, the serialized form of the document will be * altered to remove them. The algorithm used for doing the namespace fixup * while seralizing a document is a combination of the algorithms used for * lookupNamespaceURI and lookupNamespacePrefix . previous paragraph to be * defined closer here. *
Any changes made affect only the namespace prefixes and declarations * appearing in the serialized data. The DOM's view of the document is not * altered by the serialization operation, and does not reflect any changes * made to namespace declarations or prefixes in the serialized output. *
While serializing a document the serializer will write out
* non-specified values (such as attributes whose specified
is
* false
) if the output-default-values
feature is
* set to true
. If the output-default-values
flag
* is set to false
and the use-abstract-schema
* feature is set to true
the abstract schema will be used to
* determine if a value is specified or not, if
* use-abstract-schema
is not set the specified
* flag on attribute nodes is used to determine if attribute values should
* be written out.
*
Ref to Core spec (1.1.9, XML namespaces, 5th paragraph) entity ref * description about warning about unbound entity refs. Entity refs are * always serialized as &foo;, also mention this in the load part of * this spec. *
When serializing a document the DOMWriter checks to see if the document * element in the document is a DOM Level 1 element or a DOM Level 2 (or * higher) element (this check is done by looking at the localName of the * root element). If the root element is a DOM Level 1 element then the * DOMWriter will issue an error if a DOM Level 2 (or higher) element is * found while serializing. Likewise if the document element is a DOM Level * 2 (or higher) element and the DOMWriter sees a DOM Level 1 element an * error is issued. Mixing DOM Level 1 elements with DOM Level 2 (or higher) * is not supported. *
DOMWriter
s have a number of named features that can be
* queried or set. The name of DOMWriter
features must be valid
* XML names. Implementation specific features (extensions) should choose an
* implementation dependent prefix to avoid name collisions.
*
Here is a list of properties that must be recognized by all * implementations. *
"normalize-characters"
true
false
"split-cdata-sections"
true
false
CDATASection
contains an
* unrepresentable character. "validation"
true
use-abstract-schema
to true
. false
"expand-entity-references"
true
EntityReference
nodes when serializing. false
EntityReference
nodes as XML entity references. "whitespace-in-element-content"
true
false
isWhitespaceInElementContent
flag on Text
nodes
* to determine if a text node should be written out or not. "discard-default-content"
true
specified
flag on Attr
nodes,
* and so on) to decide what attributes and content should be serialized or
* not. Note that the specified
flag on Attr
nodes
* in itself is not always reliable, it is only reliable when it is set to
* false
since the only case where it can be set to
* false
is if the attribute was created by a Level 1
* implementation. false
"format-canonical"
true
false
"format-pretty-print"
true
false
See also the Document Object Model (DOM) Level 3 Abstract Schemas and Load
* and Save Specification.
*
* @since DOM Level 3
*/
#include "Experimental - subject to change" "Experimental - subject to change" "Experimental - subject to change" "Experimental - subject to change" "Experimental - subject to change" "Experimental - subject to change" "Experimental - subject to change" "Experimental - subject to change" "Experimental - subject to change" "Experimental - subject to change" "Experimental - subject to change" "Experimental - subject to change" "Experimental - subject to change"
The feature name has the same form as a DOM hasFeature string.
*
* true
or
* false
).
* @return true
if the feature could be successfully set to
* the specified value, or false
if the feature is not
* recognized or the requested value is not supported. The value of
* the feature itself is not changed.
* @since DOM Level 3
*/
virtual bool canSetFeature(const XMLCh* const featName
, bool state) const = 0;
/**
* Set the state of a feature.
*
The feature name has the same form as a DOM hasFeature string.
*
It is possible for a DOMWriter
to recognize a feature
* name but to be unable to set its value.
*
* true
or
* false
).
* @exception DOMException
* Raise a NOT_SUPPORTED_ERR exception when the DOMWriter
* recognizes the feature name but cannot set the requested value.
*
Raise a NOT_FOUND_ERR When the DOMWriter
does not
* recognize the feature name.
* @see getFeature
* @since DOM Level 3
*/
virtual void setFeature(const XMLCh* const featName
, bool state) = 0;
/**
* Look up the value of a feature.
*
The feature name has the same form as a DOM hasFeature string
* @param featName The feature name, which is a string with DOM has-feature
* syntax.
* @return The current state of the feature (true
or
* false
).
* @exception DOMException
* Raise a NOT_FOUND_ERR When the DOMWriter
does not
* recognize the feature name.
*
*
The encoding to use when writing is determined as follows: If the
* encoding attribute has been set, that value will be used.If the
* encoding attribute is null
or empty, but the item to be
* written includes an encoding declaration, that value will be used.If
* neither of the above provides an encoding name, a default encoding of
* "UTF-8" will be used.
*
The default value is null
.
*
*
*
* null
The default value for this attribute is null
.
*
* DOMWriter
. Writing a Document or Entity node produces a
* serialized form that is well formed XML. Writing other node types
* produces a fragment of text in a form that is not fully defined by
* this document, but that should be useful to a human for debugging or
* diagnostic purposes.
*
* Document
or Entity
node to
* be written. For other node types, something sensible should be
* written, but the exact serialized form is not specified.
* @return Returns true
if node
was
* successfully serialized and false
in case a failure
* occured and the failure wasn't canceled by the error handler.
* @exception DOMSystemException
* This exception will be raised in response to any sort of IO or system
* error that occurs while writing to the destination. It may wrap an
* underlying system exception.
* @since DOM Level 3
*/
virtual bool writeNode(XMLFormatTarget* const destination
, const DOMNode &nodeToWrite) = 0;
/**
* Serialize the specified node as described above in the description of
* DOMWriter
. The result of serializing the node is
* returned as a string. Writing a Document or Entity node produces a
* serialized form that is well formed XML. Writing other node types
* produces a fragment of text in a form that is not fully defined by
* this document, but that should be useful to a human for debugging or
* diagnostic purposes.
*
* null
in case a
* failure occured and the failure wasn't canceled by the error
* handler. The returned string is always in UTF-16.
* The encoding information available in DOMWriter is ignored in writeToString().
* @since DOM Level 3
*/
virtual XMLCh* writeToString(const DOMNode &nodeToWrite) = 0;
//@}
// -----------------------------------------------------------------------
// Non-standard Extension
// -----------------------------------------------------------------------
/** @name Non-standard Extension */
//@{
/**
* Called to indicate that this Writer is no longer in use
* and that the implementation may relinquish any resources associated with it.
*
* Access to a released object will lead to unexpected result.
*/
virtual void release() = 0;
//@}
};
XERCES_CPP_NAMESPACE_END
#endif