org.jaxen.dom

Class NamespaceNode

public class NamespaceNode extends Object implements Node

Extension DOM2/DOM3 node type for a namespace node.

This class implements the DOM2 and DOM3 {@link Node} interface to allow namespace nodes to be included in the result set of an XPath selectNodes operation, even though DOM does not model namespaces in scope as separate nodes.

While all of the DOM2 methods are implemented with reasonable defaults, there will be some unexpected surprises, so users are advised to test for NamespaceNodes and filter them out from the result sets as early as possible.

  1. The {@link #getNodeType} method returns {@link #NAMESPACE_NODE}, which is not one of the usual DOM2 node types. Generic code may fall unexpectedly out of switch statements, for example.
  2. The {@link #getOwnerDocument} method returns the owner document of the parent node, but that owner document will know nothing about the namespace node.

  3. The {@link #isSupported} method always returns false.
  4. The DOM3 methods sometimes throw UnsupportedOperationException. They're here only to allow this class to be compiled with Java 1.5. Do not call or rely on them.

All attempts to modify a NamespaceNode will fail with a {@link DOMException} ({@link DOMException#NO_MODIFICATION_ALLOWED_ERR}).

Author: David Megginson Elliotte Rusty Harold

See Also: DocumentNavigator

Nested Class Summary
static classNamespaceNode.EmptyNodeList
A node list with no members.
Field Summary
Stringname
static shortNAMESPACE_NODE
Constant: this is a NamespaceNode.
Nodeparent
HashMapuserData
Stringvalue
Constructor Summary
NamespaceNode(Node parent, String name, String value)
Create a new NamespaceNode.
NamespaceNode(Node parent, Node attribute)
Constructor.
Method Summary
NodeappendChild(Node newChild)
Append a new child node (always fails).
NodecloneNode(boolean deep)
Create a copy of this node.
shortcompareDocumentPosition(Node other)
Compare relative position of this node to another nbode.
voiddisallowModification()
Throw a NO_MODIFICATION_ALLOWED_ERR DOMException.
booleanequals(Object o)
Test for equivalence with another object.
booleanequals(Object a, Object b)
Helper method for comparing two objects.
NamedNodeMapgetAttributes()
Get the attribute nodes.
StringgetBaseURI()
Return the base URI of the document containing this node.
NodeListgetChildNodes()
Get the list of child nodes.
ObjectgetFeature(String feature, String version)
Returns the value of the requested feature.
NodegetFirstChild()
Get the first child node.
NodegetLastChild()
Get the last child node.
StringgetLocalName()
Get the XPath name of the namespace node;; i.e. the namespace prefix.
StringgetNamespaceURI()
Get the namespace URI of this node.
NodegetNextSibling()
Get the next sibling node.
StringgetNodeName()
Get the namespace prefix.
shortgetNodeType()
Get the node type.
StringgetNodeValue()
Get the namespace URI.
DocumentgetOwnerDocument()
Get the owner document.
NodegetParentNode()
Get the parent node.
StringgetPrefix()
Get the namespace prefix of this node.
NodegetPreviousSibling()
Get the previous sibling node.
StringgetTextContent()
Return the namespace URI.
ObjectgetUserData(String key)
Returns the user data associated with the given key.
booleanhasAttributes()
Test if this node has attributes.
booleanhasChildNodes()
Test for child nodes.
inthashCode()
Generate a hash code for a namespace node.
inthashCode(Object o)
Helper method for generating a hash code.
NodeinsertBefore(Node newChild, Node refChild)
Insert a new child node (always fails).
booleanisDefaultNamespace(String namespaceURI)
Return true if the specified URI is the default namespace in scope (always fails).
booleanisEqualNode(Node arg)
Returns true if this object binds the same prefix to the same URI.
booleanisSameNode(Node other)
Returns true if and only if this object represents the same XPath namespace node as the argument; that is, they have the same parent, the same prefix, and the same URI.
booleanisSupported(String feature, String version)
Test if a DOM2 feature is supported.
StringlookupNamespaceURI(String prefix)
Return the namespace URI mapped to the specified prefix within the scope of this namespace node.
StringlookupPrefix(String namespaceURI)
Return the prefix bound to this namespace URI within the scope of this node.
voidnormalize()
Normalize the text descendants of this node.
NoderemoveChild(Node oldChild)
Remove a child node (always fails).
NodereplaceChild(Node newChild, Node oldChild)
Replace a child node (always fails).
voidsetNodeValue(String value)
Change the namespace URI (always fails).
voidsetPrefix(String prefix)
Change the namespace prefix of this node (always fails).
voidsetTextContent(String textContent)
Change the value of this node (always fails).
ObjectsetUserData(String key, Object data, UserDataHandler handler)
Associates an object with a key.

Field Detail

name

private String name

NAMESPACE_NODE

public static final short NAMESPACE_NODE
Constant: this is a NamespaceNode.

See Also: NamespaceNode

parent

private Node parent

userData

private HashMap userData

value

private String value

Constructor Detail

NamespaceNode

public NamespaceNode(Node parent, String name, String value)
Create a new NamespaceNode.

Parameters: parent the DOM node to which the namespace is attached name the namespace prefix value the namespace URI

NamespaceNode

NamespaceNode(Node parent, Node attribute)
Constructor.

Parameters: parent the DOM node to which the namespace is attached attribute the DOM attribute object containing the namespace declaration

Method Detail

appendChild

public Node appendChild(Node newChild)
Append a new child node (always fails).

Parameters: newChild the node to add

Returns: never

Throws: DOMException always

See Also: Node#appendChild

cloneNode

public Node cloneNode(boolean deep)
Create a copy of this node.

Parameters: deep make a deep copy (no effect, since namespace nodes don't have children).

Returns: a new copy of this namespace node

compareDocumentPosition

public short compareDocumentPosition(Node other)
Compare relative position of this node to another nbode. (Always fails). This method is included solely for compatibility with the superclass.

Parameters: other the node to compare to

Returns: never

Throws: DOMException NOT_SUPPORTED_ERR

disallowModification

private void disallowModification()
Throw a NO_MODIFICATION_ALLOWED_ERR DOMException.

Throws: DOMException always thrown

equals

public boolean equals(Object o)
Test for equivalence with another object.

Two Namespace nodes are considered equivalent if their parents, names, and values are equal.

Parameters: o the object to test for equality

Returns: true if the object is equivalent to this node, false otherwise

equals

private boolean equals(Object a, Object b)
Helper method for comparing two objects.

Parameters: a the first object to compare (possibly null) b the second object to compare (possibly null)

Returns: true if the objects are equivalent or are both null

See Also: java.lang.Object#equals

getAttributes

public NamedNodeMap getAttributes()
Get the attribute nodes.

Returns: null

getBaseURI

public String getBaseURI()
Return the base URI of the document containing this node. This only works in DOM 3.

Returns: null

getChildNodes

public NodeList getChildNodes()
Get the list of child nodes.

Returns: an empty node list

getFeature

public Object getFeature(String feature, String version)
Returns the value of the requested feature. Always returns null.

Returns: null

getFirstChild

public Node getFirstChild()
Get the first child node.

Returns: null

getLastChild

public Node getLastChild()
Get the last child node.

Returns: null

getLocalName

public String getLocalName()
Get the XPath name of the namespace node;; i.e. the namespace prefix.

Returns: the namespace prefix

getNamespaceURI

public String getNamespaceURI()
Get the namespace URI of this node.

Namespace declarations are not themselves Namespace-qualified.

Returns: null

getNextSibling

public Node getNextSibling()
Get the next sibling node.

Returns: null

getNodeName

public String getNodeName()
Get the namespace prefix.

Returns: the namespace prefix, or "" for the default namespace

getNodeType

public short getNodeType()
Get the node type.

Returns: always {@link #NAMESPACE_NODE}.

getNodeValue

public String getNodeValue()
Get the namespace URI.

Returns: the namespace URI

getOwnerDocument

public Document getOwnerDocument()
Get the owner document.

Returns: the owner document of the parent node

getParentNode

public Node getParentNode()
Get the parent node.

This method returns the element that was queried for Namespaces in effect, not necessarily the actual element containing the Namespace declaration.

Returns: the parent node (not null)

getPrefix

public String getPrefix()
Get the namespace prefix of this node.

Namespace declarations are not themselves namespace-qualified.

Returns: null

See Also: NamespaceNode

getPreviousSibling

public Node getPreviousSibling()
Get the previous sibling node.

Returns: null

getTextContent

public String getTextContent()
Return the namespace URI.

Returns: the namespace URI

See Also: NamespaceNode

getUserData

public Object getUserData(String key)
Returns the user data associated with the given key.

Parameters: key the lookup key

Returns: the object associated with the key; or null if no such object is available

hasAttributes

public boolean hasAttributes()
Test if this node has attributes.

Returns: false

hasChildNodes

public boolean hasChildNodes()
Test for child nodes.

Returns: false

hashCode

public int hashCode()
Generate a hash code for a namespace node.

Returns: a hash code for this node

hashCode

private int hashCode(Object o)
Helper method for generating a hash code.

Parameters: o the object for generating a hash code (possibly null)

Returns: the object's hash code, or 0 if the object is null

See Also: java.lang.Object#hashCode

insertBefore

public Node insertBefore(Node newChild, Node refChild)
Insert a new child node (always fails).

Parameters: newChild the node to add refChild ignored

Returns: never

Throws: DOMException always

See Also: Node#insertBefore

isDefaultNamespace

public boolean isDefaultNamespace(String namespaceURI)
Return true if the specified URI is the default namespace in scope (always fails). This method is included solely for compatibility with the superclass.

Parameters: namespaceURI the URI to check

Returns: never

Throws: UnsupportedOperationException always

isEqualNode

public boolean isEqualNode(Node arg)
Returns true if this object binds the same prefix to the same URI. That is, this object has the same prefix and URI as the argument.

Parameters: arg the node to compare to

Returns: true if this object has the same prefix and URI as the argument; false otherwise

isSameNode

public boolean isSameNode(Node other)
Returns true if and only if this object represents the same XPath namespace node as the argument; that is, they have the same parent, the same prefix, and the same URI.

Parameters: other the node to compare to

Returns: true if this object represents the same XPath namespace node as other; false otherwise

isSupported

public boolean isSupported(String feature, String version)
Test if a DOM2 feature is supported. (None are.)

Parameters: feature the feature name version the feature version

Returns: false

lookupNamespaceURI

public String lookupNamespaceURI(String prefix)
Return the namespace URI mapped to the specified prefix within the scope of this namespace node.

Parameters: prefix the prefix to search for

Returns: the namespace URI mapped to this prefix

Throws: UnsupportedOperationException in DOM 2

lookupPrefix

public String lookupPrefix(String namespaceURI)
Return the prefix bound to this namespace URI within the scope of this node.

Parameters: namespaceURI the URI to find a prefix binding for

Returns: a prefix matching this namespace URI

Throws: UnsupportedOperationException in DOM 2

normalize

public void normalize()
Normalize the text descendants of this node.

This method has no effect, since namespace nodes have no descendants.

removeChild

public Node removeChild(Node oldChild)
Remove a child node (always fails).

Parameters: oldChild the child node to remove

Returns: never

Throws: DOMException always

See Also: Node#removeChild

replaceChild

public Node replaceChild(Node newChild, Node oldChild)
Replace a child node (always fails).

Parameters: newChild the node to add oldChild the child node to replace

Returns: never

Throws: DOMException always

See Also: Node#replaceChild

setNodeValue

public void setNodeValue(String value)
Change the namespace URI (always fails).

Parameters: value the new URI

Throws: DOMException always

setPrefix

public void setPrefix(String prefix)
Change the namespace prefix of this node (always fails).

Parameters: prefix the new prefix

Throws: DOMException always thrown

setTextContent

public void setTextContent(String textContent)
Change the value of this node (always fails). This method is included solely for compatibility with the superclass.

Parameters: textContent the new content

Throws: DOMException always

setUserData

public Object setUserData(String key, Object data, UserDataHandler handler)
Associates an object with a key.

Parameters: key the key by which the data will be retrieved data the object to store with the key handler ignored since namespace nodes cannot be imported, cloned, or renamed

Returns: the value previously associated with this key; or null if there isn't any such previous value