public class StartTagBuffer extends ProxyReceiver implements NamespaceResolver
StartTagBuffer also implements namespace fixup (the process of creating namespace nodes|bindings on behalf of constructed element and attribute nodes). Although this would be done anyway, further down the pipeline, it has to be done early in the case of a validating pipeline, because the namespace bindings must be created before any namespace-sensitive attribute content is validated.
The StartTagBuffer also allows error conditions to be buffered. This is because the XSIAttributeHandler validates attributes such as xsi:type and xsi:nil before attempting to match its parent element against a particle of its containing type. It is possible that the parent element will match a wildcard particle with processContents="skip", in which case an invalid xsi:type or xsi:nil attribute is not an error.
Modifier and Type | Field and Description |
---|---|
protected AttributeCollectionImpl |
bufferedAttributes |
protected int |
elementLocationId |
protected NodeName |
elementNameCode |
protected int |
elementProperties |
protected SchemaType |
elementTypeCode |
protected NamespaceBinding[] |
namespaces |
protected int |
namespacesSize |
nextReceiver
pipelineConfiguration, previousAtomic, systemId
PI_DISABLE_OUTPUT_ESCAPING, PI_ENABLE_OUTPUT_ESCAPING
Constructor and Description |
---|
StartTagBuffer(Receiver next) |
Modifier and Type | Method and Description |
---|---|
void |
attribute(NodeName attName,
SimpleType typeCode,
CharSequence value,
int locationId,
int properties)
Notify an attribute.
|
protected void |
declareAllNamespaces()
Signal namespace events for all in-scope namespaces to the current receiver in the pipeline
|
protected void |
declareNamespacesForStartElement() |
void |
endDocument()
Notify the end of a document node
|
void |
endElement()
endElement: Discard the namespaces declared locally on this element.
|
AttributeCollection |
getAllAttributes()
Get all the attributes on the current element start tag
|
String |
getAttribute(int nameCode)
Get the value of the current attribute with a given nameCode
|
String |
getAttribute(String uri,
String local)
Get the value of the current attribute with a given name
|
NamespaceBinding[] |
getLocalNamespaces()
Get the namespaces declared (or undeclared) at the current level
|
String |
getURIForPrefix(String prefix,
boolean useDefault)
Get the namespace URI corresponding to a given prefix.
|
boolean |
hasAttributeInNamespace(String uri)
Ask whether the attribute collection contains any attributes
in a specified namespace
|
boolean |
hasAttributes()
Determine if the current element has any attributes
|
Iterator<String> |
iteratePrefixes()
Get an iterator over all the prefixes declared in this namespace context.
|
void |
namespace(NamespaceBinding namespaceBinding,
int properties)
Notify a namespace.
|
void |
setPipelineConfiguration(PipelineConfiguration pipe)
Set the pipeline configuration
|
void |
startContent()
startContent: Add any namespace undeclarations needed to stop
namespaces being inherited from parent elements
|
void |
startDocument(int properties)
Start of a document node.
|
void |
startElement(NodeName nameCode,
SchemaType typeCode,
int locationId,
int properties)
startElement
|
protected void |
undeclareNamespacesForElement() |
append, characters, close, comment, getNamePool, getUnderlyingReceiver, open, processingInstruction, setSystemId, setUnderlyingReceiver, setUnparsedEntity, usesTypeAnnotations
append, getConfiguration, getPipelineConfiguration, getSystemId
protected NodeName elementNameCode
protected SchemaType elementTypeCode
protected int elementLocationId
protected int elementProperties
protected AttributeCollectionImpl bufferedAttributes
protected NamespaceBinding[] namespaces
protected int namespacesSize
public StartTagBuffer(Receiver next)
public void setPipelineConfiguration(PipelineConfiguration pipe)
setPipelineConfiguration
in interface Receiver
setPipelineConfiguration
in class ProxyReceiver
pipe
- the pipeline configurationpublic void startDocument(int properties) throws XPathException
startDocument
in interface Receiver
startDocument
in class ProxyReceiver
properties
- bit-significant integer indicating properties of the document node.
The definitions of the bits are in class ReceiverOptions
XPathException
- if an error occurspublic void endDocument() throws XPathException
endDocument
in interface Receiver
endDocument
in class ProxyReceiver
XPathException
- if an error occurspublic void startElement(NodeName nameCode, SchemaType typeCode, int locationId, int properties) throws XPathException
startElement
in interface Receiver
startElement
in class ProxyReceiver
nameCode
- integer code identifying the name of the element within the name pool.typeCode
- integer code identifying the element's type within the name pool.locationId
- an integer which can be interpreted using a LocationProvider
to return
information such as line number and system ID. If no location information is available,
the value zero is supplied.properties
- properties of the element nodeXPathException
- if an error occurspublic void namespace(NamespaceBinding namespaceBinding, int properties) throws XPathException
ProxyReceiver
namespace
in interface Receiver
namespace
in class ProxyReceiver
namespaceBinding
- the prefix/uri pair representing the namespace bindingproperties
- any special properties to be passed on this callXPathException
- if an error occurspublic void attribute(NodeName attName, SimpleType typeCode, CharSequence value, int locationId, int properties) throws XPathException
attribute
in interface Receiver
attribute
in class ProxyReceiver
attName
- The name of the attribute, as held in the name pooltypeCode
- The type of the attribute, as held in the name poolproperties
- Bit significant value. The following bits are defined:
value
- the string value of the attributelocationId
- an integer which can be interpreted using a LocationProvider
to return
information such as line number and system ID. If no location information is available,
the value zero is supplied.IllegalStateException:
- attempt to output an attribute when there is no open element
start tagXPathException
- if an error occurspublic void startContent() throws XPathException
startContent
in interface Receiver
startContent
in class ProxyReceiver
XPathException
- if an error occursprotected void declareNamespacesForStartElement() throws XPathException
XPathException
public NamespaceBinding[] getLocalNamespaces()
protected void declareAllNamespaces() throws XPathException
XPathException
- if any downstream error occurspublic void endElement() throws XPathException
endElement
in interface Receiver
endElement
in class ProxyReceiver
XPathException
- if an error occursprotected void undeclareNamespacesForElement()
public boolean hasAttributes()
public String getAttribute(int nameCode)
nameCode
- the name of the required attributepublic String getAttribute(String uri, String local)
uri
- the uri of the name of the required attributelocal
- the local part of the name of the required attributepublic AttributeCollection getAllAttributes()
public boolean hasAttributeInNamespace(String uri)
uri
- the specified namespacepublic String getURIForPrefix(String prefix, boolean useDefault)
getURIForPrefix
in interface NamespaceResolver
prefix
- the namespace prefixuseDefault
- true if the default namespace is to be used when the
prefix is ""public Iterator<String> iteratePrefixes()
iteratePrefixes
in interface NamespaceResolver
Copyright (c) 2004-2013 Saxonica Limited. All rights reserved.