A ContentHandlerProxy is a Receiver that converts events into the form expected by an
underlying SAX2 ContentHandler. Relevant events (notably comments) can also be
fed to a LexicalHandler.
Note that in general the output passed to a Receiver
corresponds to an External General Parsed Entity. A SAX2 ContentHandler only expects
to deal with well-formed XML documents, so we only pass it the contents of the first
element encountered, unless the saxon:require-well-formed output property is set to "no".
This ContentHandlerProxy provides no access to type information. For a ContentHandler that
makes type information available, see
com.saxonica.jaxp.TypedContentHandler
The ContentHandlerProxy can also be nominated as a TraceListener, to receive notification
of trace events. This will be done automatically if the option setTraceListener(
attribute
public void attribute(int nameCode,
int typeCode,
CharSequence value,
int locationId,
int properties)
throws XPathException
Notify an attribute. Attributes are notified after the startElement event, and before any
children.
- attribute in interface Receiver
comment
public void comment(CharSequence chars,
int locationId,
int properties)
throws XPathException
Output a comment. Passes it on to the ContentHandler provided that the ContentHandler
is also a SAX2 LexicalHandler.
- comment in interface Receiver
getConfiguration
public Configuration getConfiguration()
Get the Saxon configuration
getCurrentLocationId
public long getCurrentLocationId()
Get the current location identifier
- the location identifier of the most recent event. This can be translated to real
location information by passing it to the location provider.
getLocationProvider
public LocationProvider getLocationProvider()
Get the location provider
- the location provider, used to map location ids to actual URIs and line numbers
getSystemId
public String getSystemId()
Get the System ID of the destination tree
- the system ID (effectively the base URI)
getTraceListener
public ContentHandlerProxy.ContentHandlerProxyTraceListener getTraceListener()
Get the associated TraceListener that receives notification of trace events
- the trace listener. If there is no existing trace listener, then a new one
will be created.
getUnderlyingContentHandler
public ContentHandler getUnderlyingContentHandler()
Get the underlying content handler
- the SAX content handler to which all events are being directed
isRequireWellFormed
public boolean isRequireWellFormed()
Ask whether the content handler can handle a stream of events that is merely
well-balanced, or whether it can only handle a well-formed sequence.
- true if the content handler requires the event stream to represent a well-formed
XML document (containing exactly one top-level element node and no top-level text nodes)
isUndeclareNamespaces
public boolean isUndeclareNamespaces()
Ask whether namespace undeclaration events (for a non-null prefix) should be notified.
The default is no, because some ContentHandlers (e.g. JDOM) can't cope with them.
- true if namespace undeclarations (xmlns:p="") are to be output
namespace
public void namespace(int namespaceCode,
int properties)
throws XPathException
Notify a namespace. Namespaces are notified after the startElement event, and before
any children for the element.
- namespace in interface Receiver
notifyNotWellFormed
protected void notifyNotWellFormed()
throws XPathException
The following function is called when it is found that the output is not a well-formed document.
Unless the ContentHandler accepts "balanced content", this is a fatal error.
setLexicalHandler
public void setLexicalHandler(LexicalHandler handler)
Set the Lexical Handler to be used. If called, this must be called AFTER
setUnderlyingContentHandler()
handler
- the SAX lexical handler to which lexical events (such as comments) will
be notified.
setOutputProperties
public void setOutputProperties(Properties details)
throws XPathException
Set the output details.
setRequireWellFormed
public void setRequireWellFormed(boolean wellFormed)
Set whether the content handler can handle a stream of events that is merely
well-balanced, or whether it can only handle a well-formed sequence. The default is false.
wellFormed
- set to true if the content handler requires the event stream to represent a well-formed
XML document (containing exactly one top-level element node and no top-level text nodes). Otherwise,
multiple top-level elements and text nodes are allowed, as in the XDM model.
setSystemId
public void setSystemId(String systemId)
Set the System ID of the destination tree
- setSystemId in interface Receiver
systemId
- the system ID (effectively the base URI)
setUndeclareNamespaces
public void setUndeclareNamespaces(boolean undeclareNamespaces)
Set whether namespace undeclaration events (for a non-null prefix) should be notified.
The default is no, because some ContentHandlers (e.g. JDOM) can't cope with them.
undeclareNamespaces
- true if namespace undeclarations (xmlns:p="") are to be output
setUnderlyingContentHandler
public void setUnderlyingContentHandler(ContentHandler handler)
Set the underlying content handler. This call is mandatory before using this Receiver.
If the content handler is an instance of LexicalHandler
, then it will also receive
notification of lexical events such as comments.
handler
- the SAX content handler to which all events will be directed
setUnparsedEntity
public void setUnparsedEntity(String name,
String systemID,
String publicID)
throws XPathException
Notify an unparsed entity URI. This implementation does nothing: the event is ignored.
- setUnparsedEntity in interface Receiver
name
- The name of the unparsed entitysystemID
- The system identifier of the unparsed entitypublicID
- The public identifier of the unparsed entity
startContent
public void startContent()
throws XPathException
Notify the start of the content, that is, the completion of all attributes and namespaces.
Note that the initial receiver of output from XSLT instructions will not receive this event,
it has to detect it itself. Note that this event is reported for every element even if it has
no attributes, no namespaces, and no content.
- startContent in interface Receiver
startElement
public void startElement(int nameCode,
int typeCode,
int locationId,
int properties)
throws XPathException
Notify the start of an element
- startElement in interface Receiver