Class NamespaceContexHelper
- java.lang.Object
-
- com.sun.xml.stream.buffer.stax.NamespaceContexHelper
-
- All Implemented Interfaces:
java.lang.Iterable<org.jvnet.staxex.NamespaceContextEx.Binding>
,javax.xml.namespace.NamespaceContext
,org.jvnet.staxex.NamespaceContextEx
public final class NamespaceContexHelper extends java.lang.Object implements org.jvnet.staxex.NamespaceContextEx
A helper class for managing the declaration of namespaces.A namespace is declared on a namespace context. Namespace contexts are pushed on and popped off the namespace context stack.
A declared namespace will be in scope iff the context that it was declared on has not been popped off the stack.
When instantiated the namespace stack consists of the root namespace context, which contains, by default, the "xml" and "xmlns" declarations. Namespaces may be declarations may be declared on the root context. The root context cannot be popped but can be reset to contain just the "xml" and "xmlns" declarations.
Implementation note: determining the prefix from a namespace URI (or vice versa) is efficient when there are few namespace declarations i.e. what is considered to be the case for namespace declarations in 'average' XML documents. The look up of a namespace URI given a prefix is performed in O(n) time. The look up of a prefix given a namespace URI is performed in O(2n) time.
The implementation does not scale when there are many namespace declarations. TODO: Use a hash map when there are many namespace declarations.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private class
NamespaceContexHelper.NamespaceBindingImpl
-
Field Summary
Fields Modifier and Type Field Description private int
contextPosition
private int[]
contexts
private static int
DEFAULT_SIZE
private int
namespacePosition
private java.lang.String[]
namespaceURIs
private java.lang.String[]
prefixes
-
Constructor Summary
Constructors Constructor Description NamespaceContexHelper()
Create a new NamespaceContexHelper.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
declareDefaultNamespace(java.lang.String namespaceURI)
Declare a default namespace.void
declareNamespace(java.lang.String prefix, java.lang.String namespaceURI)
Declare a namespace.java.lang.String
getNamespaceURI(java.lang.String prefix)
java.lang.String
getPrefix(java.lang.String namespaceURI)
java.util.Iterator
getPrefixes(java.lang.String namespaceURI)
java.util.Iterator<org.jvnet.staxex.NamespaceContextEx.Binding>
iterator()
void
popContext()
Pop the namespace context off the stack.void
pushContext()
Push a namespace context on the stack.void
resetContexts()
Reset namespace contexts.private void
resizeContexts()
private void
resizeNamespaces()
-
-
-
Method Detail
-
getNamespaceURI
public java.lang.String getNamespaceURI(java.lang.String prefix)
- Specified by:
getNamespaceURI
in interfacejavax.xml.namespace.NamespaceContext
-
getPrefix
public java.lang.String getPrefix(java.lang.String namespaceURI)
- Specified by:
getPrefix
in interfacejavax.xml.namespace.NamespaceContext
-
getPrefixes
public java.util.Iterator getPrefixes(java.lang.String namespaceURI)
- Specified by:
getPrefixes
in interfacejavax.xml.namespace.NamespaceContext
-
iterator
public java.util.Iterator<org.jvnet.staxex.NamespaceContextEx.Binding> iterator()
- Specified by:
iterator
in interfacejava.lang.Iterable<org.jvnet.staxex.NamespaceContextEx.Binding>
- Specified by:
iterator
in interfaceorg.jvnet.staxex.NamespaceContextEx
-
declareDefaultNamespace
public void declareDefaultNamespace(java.lang.String namespaceURI)
Declare a default namespace.- Parameters:
namespaceURI
- the namespace URI to declare, may be null.
-
declareNamespace
public void declareNamespace(java.lang.String prefix, java.lang.String namespaceURI)
Declare a namespace.The namespace will be declared on the current namespace context.
The namespace can be removed by popping the current namespace context, or, if the declaration occured in the root context, by reseting the namespace context.
A default namespace can be declared by passing
""
as the value of the prefix parameter. A namespace may be undeclared by passingnull
as the value of the namespaceURI parameter.- Parameters:
prefix
- the namespace prefix to declare, may not be null.namespaceURI
- the namespace URI to declare, may be null.
-
resizeNamespaces
private void resizeNamespaces()
-
pushContext
public void pushContext()
Push a namespace context on the stack.
-
resizeContexts
private void resizeContexts()
-
popContext
public void popContext()
Pop the namespace context off the stack.Namespaces declared within the context (to be popped) will be removed and no longer be in scope.
-
resetContexts
public void resetContexts()
Reset namespace contexts.Pop all namespace contexts and reset the root context.
-
-