net.sf.saxon.event

Class ComplexContentOutputter

Implemented Interfaces:
Receiver, Result

public final class ComplexContentOutputter
extends SequenceReceiver

This class is used for generating complex content, that is, the content of an element or document node. It enforces the rules on the order of events within complex content (attributes and namespaces must come first), and it implements part of the namespace fixup rules, in particular, it ensures that there is a namespace node for the namespace used in the element name and in each attribute name.

The same ComplexContentOutputter may be used for generating an entire XML document; it is not necessary to create a new outputter for each element node.

Author:
Michael H. Kay

Field Summary

Fields inherited from class net.sf.saxon.event.SequenceReceiver

pipelineConfiguration, previousAtomic, systemId

Constructor Summary

ComplexContentOutputter()
Create a ComplexContentOutputter

Method Summary

void
append(Item item, int locationId, int copyNamespaces)
Append an arbitrary item (node or atomic value) to the output
void
attribute(int nameCode, int typeCode, CharSequence value, int locationId, int properties)
Output an attribute value.
void
characters(CharSequence s, int locationId, int properties)
Produce text content output.
void
close()
Close the output
void
comment(CharSequence comment, int locationId, int properties)
Write a comment
boolean
contentHasBeenWritten()
Test whether any content has been written to this ComplexContentOutputter
void
endDocument()
Notify the end of a document node
void
endElement()
Output an element end tag.
void
namespace(int nscode, int properties)
Output a namespace declaration.
void
open()
Start the output process
void
processingInstruction(String target, CharSequence data, int locationId, int properties)
Write a processing instruction
void
setHostLanguage(int language)
Set the host language
void
setPipelineConfiguration(PipelineConfiguration pipe)
Set the pipeline configuration
void
setReceiver(Receiver receiver)
Set the receiver (to handle the next stage in the pipeline) directly
void
startContent()
Flush out a pending start tag
void
startDocument(int properties)
Start of a document node.
void
startElement(int nameCode, int typeCode, int locationId, int properties)
Output an element start tag.

Methods inherited from class net.sf.saxon.event.SequenceReceiver

append, getConfiguration, getNamePool, getPipelineConfiguration, getSystemId, open, setPipelineConfiguration, setSystemId, setUnparsedEntity

Constructor Details

ComplexContentOutputter

public ComplexContentOutputter()
Create a ComplexContentOutputter

Method Details

append

public void append(Item item,
                   int locationId,
                   int copyNamespaces)
            throws XPathException
Append an arbitrary item (node or atomic value) to the output
Overrides:
append in interface SequenceReceiver
Parameters:
item - the item to be appended
locationId - the location of the calling instruction, for diagnostics
copyNamespaces - if the item is an element node, this indicates whether its namespaces need to be copied. Values are NodeInfo.ALL_NAMESPACES, NodeInfo.LOCAL_NAMESPACES, NodeInfo.NO_NAMESPACES

attribute

public void attribute(int nameCode,
                      int typeCode,
                      CharSequence value,
                      int locationId,
                      int properties)
            throws XPathException
Output an attribute value.
This is added to a list of pending attributes for the current start tag, overwriting any previous attribute with the same name.
This method should NOT be used to output namespace declarations.
Specified by:
attribute in interface Receiver
Parameters:
nameCode - The name of the attribute
value - The value of the attribute
properties - Bit fields containing properties of the attribute to be written
Throws:
XPathException - if there is no start tag to write to (created using writeStartTag), or if character content has been written since the start tag was written.

characters

public void characters(CharSequence s,
                       int locationId,
                       int properties)
            throws XPathException
Produce text content output.
Special characters are escaped using XML/HTML conventions if the output format requires it.
Specified by:
characters in interface Receiver
Parameters:
s - The String to be output
Throws:
XPathException - for any failure

close

public void close()
            throws XPathException
Close the output
Specified by:
close in interface Receiver

comment

public void comment(CharSequence comment,
                    int locationId,
                    int properties)
            throws XPathException
Write a comment
Specified by:
comment in interface Receiver

contentHasBeenWritten

public boolean contentHasBeenWritten()
Test whether any content has been written to this ComplexContentOutputter
Returns:
true if content has been written

endDocument

public void endDocument()
            throws XPathException
Notify the end of a document node
Specified by:
endDocument in interface Receiver

endElement

public void endElement()
            throws XPathException
Output an element end tag.
Specified by:
endElement in interface Receiver

namespace

public void namespace(int nscode,
                      int properties)
            throws XPathException
Output a namespace declaration.
This is added to a list of pending namespaces for the current start tag. If there is already another declaration of the same prefix, this one is ignored, unless the REJECT_DUPLICATES flag is set, in which case this is an error. Note that unlike SAX2 startPrefixMapping(), this call is made AFTER writing the start tag.
Specified by:
namespace in interface Receiver
Parameters:
nscode - The namespace code
Throws:
XPathException - if there is no start tag to write to (created using writeStartTag), or if character content has been written since the start tag was written.

open

public void open()
            throws XPathException
Start the output process
Specified by:
open in interface Receiver
Overrides:
open in interface SequenceReceiver

processingInstruction

public void processingInstruction(String target,
                                  CharSequence data,
                                  int locationId,
                                  int properties)
            throws XPathException
Write a processing instruction
Specified by:
processingInstruction in interface Receiver

setHostLanguage

public void setHostLanguage(int language)
Set the host language

setPipelineConfiguration

public void setPipelineConfiguration(PipelineConfiguration pipe)
Set the pipeline configuration
Specified by:
setPipelineConfiguration in interface Receiver
Overrides:
setPipelineConfiguration in interface SequenceReceiver
Parameters:

setReceiver

public void setReceiver(Receiver receiver)
Set the receiver (to handle the next stage in the pipeline) directly
Parameters:
receiver - the receiver to handle the next stage in the pipeline

startContent

public void startContent()
            throws XPathException
Flush out a pending start tag
Specified by:
startContent in interface Receiver

startDocument

public void startDocument(int properties)
            throws XPathException
Start of a document node.
Specified by:
startDocument in interface Receiver

startElement

public void startElement(int nameCode,
                         int typeCode,
                         int locationId,
                         int properties)
            throws XPathException
Output an element start tag.
The actual output of the tag is deferred until all attributes have been output using attribute().
Specified by:
startElement in interface Receiver
Parameters:
nameCode - The element name code