org.apache.xml.serialize
Class XMLSerializer

java.lang.Object
  |
  +--org.apache.xml.serialize.BaseMarkupSerializer
        |
        +--org.apache.xml.serialize.XMLSerializer
All Implemented Interfaces:
org.xml.sax.ContentHandler, org.xml.sax.ext.DeclHandler, org.xml.sax.DocumentHandler, DOMSerializer, org.apache.xerces.dom3.ls.DOMWriter, org.xml.sax.DTDHandler, org.xml.sax.ext.LexicalHandler, Serializer

public class XMLSerializer
extends BaseMarkupSerializer
implements org.apache.xerces.dom3.ls.DOMWriter

Implements an XML serializer supporting both DOM and SAX pretty serializing. For usage instructions see Serializer.

If an output stream is used, the encoding is taken from the output format (defaults to UTF-8). If a writer is used, make sure the writer uses the same encoding (if applies) as specified in the output format.

The serializer supports both DOM and SAX. SAX serializing is done by firing SAX events and using the serializer as a document handler. DOM serializing is done by calling BaseMarkupSerializer.serialize(Document) or by using DOM Level 3 DOMWriter and serializing with DOMWriter.writeNode(java.io.OutputStream, org.w3c.dom.Node), DOMWriter.writeToString(org.w3c.dom.Node).

If an I/O exception occurs while serializing, the serializer will not throw an exception directly, but only throw it at the end of serializing (either DOM or SAX's DocumentHandler.endDocument().

For elements that are not specified as whitespace preserving, the serializer will potentially break long text lines at space boundaries, indent lines, and serialize elements on separate lines. Line terminators will be regarded as spaces, and spaces at beginning of line will be stripped.

Version:
$Revision: 1.32 $ $Date: 2002/02/22 20:44:03 $
Author:
Assaf Arkin, Rahul Srivastava, Elena Litani IBM
See Also:
Serializer

Field Summary
protected static boolean DEBUG
           
protected  boolean fDOML1
           
protected  java.lang.String fEmptySymbol
           
protected  org.apache.xerces.util.NamespaceSupport fLocalNSBinder
          stores all namespace bindings on the current element
protected  int fNamespaceCounter
           
protected  boolean fNamespaces
           
protected  org.apache.xerces.util.NamespaceSupport fNSBinder
          stores namespaces in scope
protected  org.apache.xerces.util.SymbolTable fSymbolTable
          symbol table for serialization
protected  java.lang.String fXmlnsSymbol
           
protected  java.lang.String fXmlSymbol
           
 
Fields inherited from class org.apache.xml.serialize.BaseMarkupSerializer
_docTypePublicId, _docTypeSystemId, _format, _indenting, _prefixes, _printer, _started, fDOMError, fDOMErrorHandler, fFeatures, fStrBuffer
 
Constructor Summary
XMLSerializer()
          Constructs a new serializer.
XMLSerializer(OutputFormat format)
          Constructs a new serializer.
XMLSerializer(java.io.OutputStream output, OutputFormat format)
          Constructs a new serializer that writes to the specified output stream using the specified output format.
XMLSerializer(java.io.Writer writer, OutputFormat format)
          Constructs a new serializer that writes to the specified writer using the specified output format.
 
Method Summary
 boolean canSetFeature(java.lang.String name, boolean state)
          Query whether setting a feature to a specific value is supported.
 void endElement(java.lang.String tagName)
          Receive notification of the end of an element.
 void endElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String rawName)
          Receive notification of the end of an element.
 void endElementIO(java.lang.String namespaceURI, java.lang.String localName, java.lang.String rawName)
           
 java.lang.String getEncoding()
          The character encoding in which the output will be written.
protected  java.lang.String getEntityRef(int ch)
          Returns the suitable entity reference for this character value, or null if no such entity exists.
 org.apache.xerces.dom3.DOMErrorHandler getErrorHandler()
          The error handler that will receive error notifications during serialization.
 boolean getFeature(java.lang.String name)
          Look up the value of a feature.
 java.lang.String getLastEncoding()
          The actual character encoding that was last used by this formatter.
 java.lang.String getNewLine()
          The end-of-line sequence of characters to be used in the XML being written out.
 void initDOMFeatures()
          Initialize DOM Level 3 features
 boolean reset()
           
protected  void serializeElement(org.w3c.dom.Element elem)
          Called to serialize a DOM element.
 void setEncoding(java.lang.String encoding)
          The character encoding in which the output will be written.
 void setErrorHandler(org.apache.xerces.dom3.DOMErrorHandler errorHandler)
          The error handler that will receive error notifications during serialization.
 void setFeature(java.lang.String name, boolean state)
          Set the state of a feature.
 void setNamespaces(boolean namespaces)
          If true, activate namespace support by performing DOM L3 namespace fixup algorithm
 void setNewLine(java.lang.String newLine)
          The end-of-line sequence of characters to be used in the XML being written out.
 void setOutputFormat(OutputFormat format)
          Specifies an output format for this serializer.
protected  void startDocument(java.lang.String rootTagName)
          Called to serialize the document's DOCTYPE by the root element.
 void startElement(java.lang.String tagName, org.xml.sax.AttributeList attrs)
          Receive notification of the beginning of an element.
 void startElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String rawName, org.xml.sax.Attributes attrs)
          Receive notification of the beginning of an element.
 boolean writeNode(java.io.OutputStream destination, org.w3c.dom.Node wnode)
          Write out the specified node as described above in the description of DOMWriter.
 java.lang.String writeToString(org.w3c.dom.Node wnode)
          Serialize the specified node as described above in the description of DOMWriter.
 
Methods inherited from class org.apache.xml.serialize.BaseMarkupSerializer
asContentHandler, asDocumentHandler, asDOMSerializer, attributeDecl, characters, characters, comment, comment, content, elementDecl, endCDATA, endDocument, endDTD, endEntity, endNonEscaping, endPrefixMapping, endPreserving, enterElementState, externalEntityDecl, getElementState, getPrefix, ignorableWhitespace, internalEntityDecl, isDocumentState, leaveElementState, modifyDOMError, notationDecl, prepare, printDoctypeURL, printEscaped, printEscaped, printText, printText, processingInstruction, processingInstructionIO, serialize, serialize, serialize, serializeNode, serializePreRoot, setDocumentLocator, setOutputByteStream, setOutputCharStream, skippedEntity, startCDATA, startDocument, startDTD, startEntity, startNonEscaping, startPrefixMapping, startPreserving, unparsedEntityDecl
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEBUG

protected static final boolean DEBUG

fNSBinder

protected org.apache.xerces.util.NamespaceSupport fNSBinder
stores namespaces in scope

fLocalNSBinder

protected org.apache.xerces.util.NamespaceSupport fLocalNSBinder
stores all namespace bindings on the current element

fSymbolTable

protected final org.apache.xerces.util.SymbolTable fSymbolTable
symbol table for serialization

fEmptySymbol

protected java.lang.String fEmptySymbol

fXmlSymbol

protected java.lang.String fXmlSymbol

fXmlnsSymbol

protected java.lang.String fXmlnsSymbol

fDOML1

protected boolean fDOML1

fNamespaceCounter

protected int fNamespaceCounter

fNamespaces

protected boolean fNamespaces
Constructor Detail

XMLSerializer

public XMLSerializer()
Constructs a new serializer. The serializer cannot be used without calling #setOutFputCharStream or BaseMarkupSerializer.setOutputByteStream(java.io.OutputStream) first.

XMLSerializer

public XMLSerializer(OutputFormat format)
Constructs a new serializer. The serializer cannot be used without calling BaseMarkupSerializer.setOutputCharStream(java.io.Writer) or BaseMarkupSerializer.setOutputByteStream(java.io.OutputStream) first.

XMLSerializer

public XMLSerializer(java.io.Writer writer,
                     OutputFormat format)
Constructs a new serializer that writes to the specified writer using the specified output format. If format is null, will use a default output format.
Parameters:
writer - The writer to use
format - The output format to use, null for the default

XMLSerializer

public XMLSerializer(java.io.OutputStream output,
                     OutputFormat format)
Constructs a new serializer that writes to the specified output stream using the specified output format. If format is null, will use a default output format.
Parameters:
output - The output stream to use
format - The output format to use, null for the default
Method Detail

setOutputFormat

public void setOutputFormat(OutputFormat format)
Description copied from interface: Serializer
Specifies an output format for this serializer. It the serializer has already been associated with an output format, it will switch to the new format. This method should not be called while the serializer is in the process of serializing a document.
Overrides:
setOutputFormat in class BaseMarkupSerializer
Following copied from interface: org.apache.xml.serialize.Serializer
Parameters:
format - The output format to use

startElement

public void startElement(java.lang.String namespaceURI,
                         java.lang.String localName,
                         java.lang.String rawName,
                         org.xml.sax.Attributes attrs)
                  throws org.xml.sax.SAXException
Description copied from interface: org.xml.sax.ContentHandler
Receive notification of the beginning of an element.

The Parser will invoke this method at the beginning of every element in the XML document; there will be a corresponding endElement event for every startElement event (even when the element is empty). All of the element's content will be reported, in order, before the corresponding endElement event.

This event allows up to three name components for each element:

  1. the Namespace URI;
  2. the local name; and
  3. the qualified (prefixed) name.

Any or all of these may be provided, depending on the values of the http://xml.org/sax/features/namespaces and the http://xml.org/sax/features/namespace-prefixes properties:

Note that the attribute list provided will contain only attributes with explicit values (specified or defaulted): #IMPLIED attributes will be omitted. The attribute list will contain attributes used for Namespace declarations (xmlns* attributes) only if the http://xml.org/sax/features/namespace-prefixes property is true (it is false by default, and support for a true value is optional).

Following copied from interface: org.xml.sax.ContentHandler
Parameters:
uri - The Namespace URI, or the empty string if the element has no Namespace URI or if Namespace processing is not being performed.
localName - The local name (without prefix), or the empty string if Namespace processing is not being performed.
qName - The qualified name (with prefix), or the empty string if qualified names are not available.
atts - The attributes attached to the element. If there are no attributes, it shall be an empty Attributes object.
Throws:
org.xml.sax.SAXException - Any SAX exception, possibly wrapping another exception.
See Also:
ContentHandler.endElement(java.lang.String, java.lang.String, java.lang.String), Attributes

endElement

public void endElement(java.lang.String namespaceURI,
                       java.lang.String localName,
                       java.lang.String rawName)
                throws org.xml.sax.SAXException
Description copied from interface: org.xml.sax.ContentHandler
Receive notification of the end of an element.

The SAX parser will invoke this method at the end of every element in the XML document; there will be a corresponding startElement event for every endElement event (even when the element is empty).

For information on the names, see startElement.

Following copied from interface: org.xml.sax.ContentHandler
Parameters:
uri - The Namespace URI, or the empty string if the element has no Namespace URI or if Namespace processing is not being performed.
localName - The local name (without prefix), or the empty string if Namespace processing is not being performed.
qName - The qualified XML 1.0 name (with prefix), or the empty string if qualified names are not available.
Throws:
org.xml.sax.SAXException - Any SAX exception, possibly wrapping another exception.

endElementIO

public void endElementIO(java.lang.String namespaceURI,
                         java.lang.String localName,
                         java.lang.String rawName)
                  throws java.io.IOException

startElement

public void startElement(java.lang.String tagName,
                         org.xml.sax.AttributeList attrs)
                  throws org.xml.sax.SAXException
Description copied from interface: org.xml.sax.DocumentHandler
Receive notification of the beginning of an element.

The Parser will invoke this method at the beginning of every element in the XML document; there will be a corresponding endElement() event for every startElement() event (even when the element is empty). All of the element's content will be reported, in order, before the corresponding endElement() event.

If the element name has a namespace prefix, the prefix will still be attached. Note that the attribute list provided will contain only attributes with explicit values (specified or defaulted): #IMPLIED attributes will be omitted.

Following copied from interface: org.xml.sax.DocumentHandler
Parameters:
name - The element type name.
atts - The attributes attached to the element, if any.
Throws:
org.xml.sax.SAXException - Any SAX exception, possibly wrapping another exception.
See Also:
DocumentHandler.endElement(java.lang.String), AttributeList

endElement

public void endElement(java.lang.String tagName)
                throws org.xml.sax.SAXException
Description copied from interface: org.xml.sax.DocumentHandler
Receive notification of the end of an element.

The SAX parser will invoke this method at the end of every element in the XML document; there will be a corresponding startElement() event for every endElement() event (even when the element is empty).

If the element name has a namespace prefix, the prefix will still be attached to the name.

Following copied from interface: org.xml.sax.DocumentHandler
Parameters:
name - The element type name
Throws:
org.xml.sax.SAXException - Any SAX exception, possibly wrapping another exception.

startDocument

protected void startDocument(java.lang.String rootTagName)
                      throws java.io.IOException
Called to serialize the document's DOCTYPE by the root element. The document type declaration must name the root element, but the root element is only known when that element is serialized, and not at the start of the document.

This method will check if it has not been called before (BaseMarkupSerializer._started), will serialize the document type declaration, and will serialize all pre-root comments and PIs that were accumulated in the document (see BaseMarkupSerializer.serializePreRoot()). Pre-root will be serialized even if this is not the first root element of the document.


serializeElement

protected void serializeElement(org.w3c.dom.Element elem)
                         throws java.io.IOException
Called to serialize a DOM element. Equivalent to calling startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes), endElement(java.lang.String, java.lang.String, java.lang.String) and serializing everything inbetween, but better optimized.
Overrides:
serializeElement in class BaseMarkupSerializer
Following copied from class: org.apache.xml.serialize.BaseMarkupSerializer
Parameters:
elem - The element to serialize
Throws:
java.io.IOException - An I/O exception occured while serializing

getEntityRef

protected java.lang.String getEntityRef(int ch)
Description copied from class: BaseMarkupSerializer
Returns the suitable entity reference for this character value, or null if no such entity exists. Calling this method with '&' will return "&".
Overrides:
getEntityRef in class BaseMarkupSerializer
Following copied from class: org.apache.xml.serialize.BaseMarkupSerializer
Parameters:
ch - Character value
Returns:
Character entity name, or null

setNamespaces

public void setNamespaces(boolean namespaces)
If true, activate namespace support by performing DOM L3 namespace fixup algorithm
Parameters:
namespaces -  
Returns:
 

initDOMFeatures

public void initDOMFeatures()
Initialize DOM Level 3 features

setFeature

public void setFeature(java.lang.String name,
                       boolean state)
                throws org.w3c.dom.DOMException
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.
Specified by:
setFeature in interface org.apache.xerces.dom3.ls.DOMWriter
Parameters:
name - The feature name.
state - The requested state of the feature (true or false).
Throws:
org.w3c.dom.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.

canSetFeature

public boolean canSetFeature(java.lang.String name,
                             boolean state)
Query whether setting a feature to a specific value is supported.
The feature name has the same form as a DOM hasFeature string.
Specified by:
canSetFeature in interface org.apache.xerces.dom3.ls.DOMWriter
Parameters:
name - The feature name, which is a DOM has-feature style string.
state - The requested state of the feature (true or false).
Returns:
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.

getFeature

public boolean getFeature(java.lang.String name)
                   throws org.w3c.dom.DOMException
Look up the value of a feature.
The feature name has the same form as a DOM hasFeature string
Specified by:
getFeature in interface org.apache.xerces.dom3.ls.DOMWriter
Parameters:
name - The feature name, which is a string with DOM has-feature syntax.
Returns:
The current state of the feature (true or false).
Throws:
org.w3c.dom.DOMException - Raise a NOT_FOUND_ERR When the DOMWriter does not recognize the feature name.

getEncoding

public java.lang.String getEncoding()
The character encoding in which the output will be written.
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.
Specified by:
getEncoding in interface org.apache.xerces.dom3.ls.DOMWriter

setEncoding

public void setEncoding(java.lang.String encoding)
The character encoding in which the output will be written.
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.
Specified by:
setEncoding in interface org.apache.xerces.dom3.ls.DOMWriter

getLastEncoding

public java.lang.String getLastEncoding()
The actual character encoding that was last used by this formatter. This convenience method allows the encoding that was used when serializing a document to be directly obtained.
Specified by:
getLastEncoding in interface org.apache.xerces.dom3.ls.DOMWriter

getNewLine

public java.lang.String getNewLine()
The end-of-line sequence of characters to be used in the XML being written out. The only permitted values are these:
null
Use a default end-of-line sequence. DOM implementations should choose the default to match the usual convention for text files in the environment being used. Implementations must choose a default sequence that matches one of those allowed by 2.11 "End-of-Line Handling".
CR
The carriage-return character (#xD).
CR-LF
The carriage-return and line-feed characters (#xD #xA).
LF
The line-feed character (#xA).

The default value for this attribute is null.
Specified by:
getNewLine in interface org.apache.xerces.dom3.ls.DOMWriter

setNewLine

public void setNewLine(java.lang.String newLine)
The end-of-line sequence of characters to be used in the XML being written out. The only permitted values are these:
null
Use a default end-of-line sequence. DOM implementations should choose the default to match the usual convention for text files in the environment being used. Implementations must choose a default sequence that matches one of those allowed by 2.11 "End-of-Line Handling".
CR
The carriage-return character (#xD).
CR-LF
The carriage-return and line-feed characters (#xD #xA).
LF
The line-feed character (#xA).

The default value for this attribute is null.
Specified by:
setNewLine in interface org.apache.xerces.dom3.ls.DOMWriter

getErrorHandler

public org.apache.xerces.dom3.DOMErrorHandler getErrorHandler()
The error handler that will receive error notifications during serialization. The node where the error occured is passed to this error handler, any modification to nodes from within an error callback should be avoided since this will result in undefined, implementation dependent behavior.
Specified by:
getErrorHandler in interface org.apache.xerces.dom3.ls.DOMWriter

setErrorHandler

public void setErrorHandler(org.apache.xerces.dom3.DOMErrorHandler errorHandler)
The error handler that will receive error notifications during serialization. The node where the error occured is passed to this error handler, any modification to nodes from within an error callback should be avoided since this will result in undefined, implementation dependent behavior.
Specified by:
setErrorHandler in interface org.apache.xerces.dom3.ls.DOMWriter

writeNode

public boolean writeNode(java.io.OutputStream destination,
                         org.w3c.dom.Node wnode)
                  throws java.lang.Exception
Write out the specified node as described above in the description of 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.
Specified by:
writeNode in interface org.apache.xerces.dom3.ls.DOMWriter
Parameters:
destination - The destination for the data to be written.
wnode - The Document or Entity node to be written. For other node types, something sensible should be written, but the exact serialized form is not specified.
Returns:
Returns true if node was successfully serialized and false in case a failure occured and the failure wasn't canceled by the error handler.
Throws:
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.

writeToString

public java.lang.String writeToString(org.w3c.dom.Node wnode)
                               throws org.w3c.dom.DOMException
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.
Specified by:
writeToString in interface org.apache.xerces.dom3.ls.DOMWriter
Parameters:
wnode - The node to be written.
Returns:
Returns the serialized data, or null in case a failure occured and the failure wasn't canceled by the error handler.
Throws:
org.w3c.dom.DOMException - DOMSTRING_SIZE_ERR: The resulting string is too long to fit in a DOMString.

reset

public boolean reset()
Overrides:
reset in class BaseMarkupSerializer


Copyright © 1999-2002 Apache XML Project. All Rights Reserved.