net.sf.saxon.event
Class SequenceOutputter

java.lang.Object
  extended bynet.sf.saxon.event.Outputter
      extended bynet.sf.saxon.event.SequenceOutputter
All Implemented Interfaces:
Receiver, javax.xml.transform.Result, SequenceReceiver

public final class SequenceOutputter
extends Outputter

This outputter is used when writing a sequence of atomic values and nodes, that is, when xsl:variable is used with content and an "as" attribute. The outputter builds the sequence and provides access to it. (It isn't really an outputter at all, it doesn't pass the events to anyone, it merely constructs the sequence in memory and provides access to it). Note that the event sequence can include calls such as startElement and endElement that require trees to be built. If nodes such as attributes and text nodes are received while an element is being constructed, the nodes are added to the tree. Otherwise, "orphan" nodes (nodes with no parent) are created and added directly to the sequence.

This class is not used to build temporary trees. For that, the ComplexContentOutputter is used.

The SequenceOutputter no longer does type checking. This function is now performed, where necessary, by a SequenceChecker that filters the event stream before it reaches the SequenceOutputter.

Author:
Field Summary
 
Fields inherited from class net.sf.saxon.event.Outputter
previousAtomic
 
Fields inherited from interface javax.xml.transform.Result
PI_DISABLE_OUTPUT_ESCAPING, PI_ENABLE_OUTPUT_ESCAPING
 
Constructor Summary
SequenceOutputter()
          Create a new SequenceOutputter
 
Method Summary
 void append(Item item)
          Append an item to the sequence, performing any necessary type-checking and conversion
 void attribute(int nameCode, int typeCode, java.lang.CharSequence value, int properties)
          Output an attribute value.
 void characters(java.lang.CharSequence s, int properties)
          Produce text content output.
 void comment(java.lang.CharSequence comment, int properties)
          Write a comment.
 void endDocument()
          Close the output
 void endElement()
          Output an element end tag.
 Item getFirstItem()
          Get the first item in the sequence that has been built
 NamePool getNamePool()
          Get the name pool
 Value getSequence()
          Get the sequence that has been built
 java.lang.String getSystemId()
          Get the system ID
 void namespace(int nscode, int properties)
          Output a namespace declaration.
 void processingInstruction(java.lang.String target, java.lang.CharSequence data, int properties)
          Write a processing instruction No-op in this implementation
 void setNamePool(NamePool pool)
          Set the name pool.
 void setSystemId(java.lang.String systemId)
          Set the system ID
 void startContent()
          The startContent() event is notified after all namespaces and attributes of an element have been notified, and before any child nodes are notified.
 void startDocument()
          Notify the start of the document.
 void startElement(int nameCode, int typeCode, int properties)
          Output an element start tag.
 
Methods inherited from class net.sf.saxon.event.Outputter
setDocumentLocator, setUnparsedEntity
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SequenceOutputter

public SequenceOutputter()
Create a new SequenceOutputter

Method Detail

setNamePool

public void setNamePool(NamePool pool)
Set the name pool. This method must be called before startDocument() is called.

Specified by:
setNamePool in interface Receiver
Overrides:
setNamePool in class Outputter
Parameters:
pool - the name pool. This name pool must contain all the name codes that are passed across this interface.

getNamePool

public NamePool getNamePool()
Get the name pool

Specified by:
getNamePool in interface Receiver
Overrides:
getNamePool in class Outputter
Returns:
the Name Pool that was supplied using the setNamePool() method

setSystemId

public void setSystemId(java.lang.String systemId)
Set the system ID

Specified by:
setSystemId in interface Receiver
Overrides:
setSystemId in class Outputter
Parameters:
systemId - the URI used to identify the tree being passed across this interface

getSystemId

public java.lang.String getSystemId()
Get the system ID

Specified by:
getSystemId in interface javax.xml.transform.Result
Overrides:
getSystemId in class Outputter
Returns:
the system ID that was supplied using the setSystemId() method

startDocument

public final void startDocument()
                         throws javax.xml.transform.TransformerException
Notify the start of the document. This event is notified once, before any other events. This implementation does nothing.

Specified by:
startDocument in interface Receiver
Overrides:
startDocument in class Outputter
Throws:
javax.xml.transform.TransformerException

startElement

public void startElement(int nameCode,
                         int typeCode,
                         int properties)
                  throws javax.xml.transform.TransformerException
Output an element start tag.

Parameters:
nameCode - The element name code - a code held in the Name Pool
typeCode - Integer code identifying the type of this element. Zero identifies the default type, that is xs:anyType
properties - bit-significant flags indicating any special information
Throws:
javax.xml.transform.TransformerException

endElement

public void endElement()
                throws javax.xml.transform.TransformerException
Output an element end tag.

Throws:
javax.xml.transform.TransformerException

namespace

public void namespace(int nscode,
                      int properties)
               throws javax.xml.transform.TransformerException
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. Note that unlike SAX2 startPrefixMapping(), this call is made AFTER writing the start tag.

Parameters:
nscode - The namespace code
properties - Allows special properties to be passed if required
Throws:
javax.xml.transform.TransformerException - 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.

attribute

public void attribute(int nameCode,
                      int typeCode,
                      java.lang.CharSequence value,
                      int properties)
               throws javax.xml.transform.TransformerException
Output an attribute value.

Parameters:
nameCode - An integer code representing the name of the attribute, as held in the Name Pool
typeCode - Integer code identifying the type annotation of the attribute; zero represents the default type (xs:untypedAtomic)
value - The value of the attribute
properties - Bit significant flags for passing extra information to the serializer, e.g. to disable escaping
Throws:
javax.xml.transform.TransformerException - 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.

startContent

public void startContent()
                  throws javax.xml.transform.TransformerException
The startContent() event is notified after all namespaces and attributes of an element have been notified, and before any child nodes are notified.

Throws:
javax.xml.transform.TransformerException - for any failure

characters

public void characters(java.lang.CharSequence s,
                       int properties)
                throws javax.xml.transform.TransformerException
Produce text content output.

Parameters:
s - The String to be output
properties - bit-significant flags for extra information, e.g. disable-output-escaping
Throws:
javax.xml.transform.TransformerException - for any failure

comment

public void comment(java.lang.CharSequence comment,
                    int properties)
             throws javax.xml.transform.TransformerException
Write a comment.

Parameters:
comment - The content of the comment
properties - Additional information about the comment. The following bits are defined:
CHECKED
Comment is known to be legal (e.g. doesn't contain "--")
Throws:
javax.xml.transform.TransformerException

processingInstruction

public void processingInstruction(java.lang.String target,
                                  java.lang.CharSequence data,
                                  int properties)
                           throws javax.xml.transform.TransformerException
Write a processing instruction No-op in this implementation

Parameters:
target - The PI name. This must be a legal name (it will not be checked).
data - The data portion of the processing instruction
properties - Additional information about the PI. The following bits are defined:
CHECKED
Data is known to be legal (e.g. doesn't contain "?>")
Throws:
javax.xml.transform.TransformerException

endDocument

public void endDocument()
                 throws javax.xml.transform.TransformerException
Close the output

Throws:
javax.xml.transform.TransformerException

append

public void append(Item item)
            throws javax.xml.transform.TransformerException
Append an item to the sequence, performing any necessary type-checking and conversion

Throws:
javax.xml.transform.TransformerException

getSequence

public Value getSequence()
Get the sequence that has been built


getFirstItem

public Item getFirstItem()
Get the first item in the sequence that has been built