org.jaxen.dom

Class NamespaceNode

Implemented Interfaces:
Node

public class NamespaceNode
extends java.lang.Object
implements Node

Extension DOM2/DOM3 node type for a namespace node.

This class implements the DOM2 and DOM3 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 getNodeType() method returns 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 getOwnerDocument() method returns the owner document of the parent node, but that owner document will know nothing about the namespace node.
  3. The isSupported(String,String) 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 DOMException (DOMException.NO_MODIFICATION_ALLOWED_ERR).

Authors:
David Megginson
Elliotte Rusty Harold
See Also:
DocumentNavigator

Nested Class Summary

private static class
NamespaceNode.EmptyNodeList
A node list with no members.

Field Summary

static short
NAMESPACE_NODE
Constant: this is a NamespaceNode.
private String
name
private Node
parent
private HashMap
userData
private String
value

Constructor Summary

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

Method Summary

Node
appendChild(Node newChild)
Append a new child node (always fails).
Node
cloneNode(boolean deep)
Create a copy of this node.
short
compareDocumentPosition(Node other)
Compare relative position of this node to another nbode.
private void
disallowModification()
Throw a NO_MODIFICATION_ALLOWED_ERR DOMException.
boolean
equals(Object o)
Test for equivalence with another object.
private boolean
equals(Object a, Object b)
Helper method for comparing two objects.
NamedNodeMap
getAttributes()
Get the attribute nodes.
String
getBaseURI()
Return the base URI of the document containing this node.
NodeList
getChildNodes()
Get the list of child nodes.
Object
getFeature(String feature, String version)
Returns the value of the requested feature.
Node
getFirstChild()
Get the first child node.
Node
getLastChild()
Get the last child node.
String
getLocalName()
Get the XPath name of the namespace node;; i.e.
String
getNamespaceURI()
Get the namespace URI of this node.
Node
getNextSibling()
Get the next sibling node.
String
getNodeName()
Get the namespace prefix.
short
getNodeType()
Get the node type.
String
getNodeValue()
Get the namespace URI.
Document
getOwnerDocument()
Get the owner document.
Node
getParentNode()
Get the parent node.
String
getPrefix()
Get the namespace prefix of this node.
Node
getPreviousSibling()
Get the previous sibling node.
String
getTextContent()
Return the namespace URI.
Object
getUserData(String key)
Returns the user data associated with the given key.
boolean
hasAttributes()
Test if this node has attributes.
boolean
hasChildNodes()
Test for child nodes.
int
hashCode()
Generate a hash code for a namespace node.
private int
hashCode(Object o)
Helper method for generating a hash code.
Node
insertBefore(Node newChild, Node refChild)
Insert a new child node (always fails).
boolean
isDefaultNamespace(String namespaceURI)
Return true if the specified URI is the default namespace in scope (always fails).
boolean
isEqualNode(Node arg)
Returns true if this object binds the same prefix to the same URI.
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.
boolean
isSupported(String feature, String version)
Test if a DOM2 feature is supported.
String
lookupNamespaceURI(String prefix)
Return the namespace URI mapped to the specified prefix within the scope of this namespace node.
String
lookupPrefix(String namespaceURI)
Return the prefix bound to this namespace URI within the scope of this node.
void
normalize()
Normalize the text descendants of this node.
Node
removeChild(Node oldChild)
Remove a child node (always fails).
Node
replaceChild(Node newChild, Node oldChild)
Replace a child node (always fails).
void
setNodeValue(String value)
Change the namespace URI (always fails).
void
setPrefix(String prefix)
Change the namespace prefix of this node (always fails).
void
setTextContent(String textContent)
Change the value of this node (always fails).
Object
setUserData(String key, Object data, org.w3c.dom.UserDataHandler handler)
Associates an object with a key.

Field Details

NAMESPACE_NODE

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

name

private String name

parent

private Node parent

userData

private HashMap userData

value

private String value

Constructor Details

NamespaceNode

(package private)  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

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

Method Details

appendChild

public Node appendChild(Node newChild)
            throws DOMException
Append a new child node (always fails).
Parameters:
newChild - the node to add
Returns:
never
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)
            throws DOMException
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

disallowModification

private void disallowModification()
            throws DOMException
Throw a NO_MODIFICATION_ALLOWED_ERR DOMException.

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.

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

getPreviousSibling

public Node getPreviousSibling()
Get the previous sibling node.
Returns:
null

getTextContent

public String getTextContent()
Return the namespace URI.
Returns:
the namespace URI

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)
            throws DOMException
Insert a new child node (always fails).
Parameters:
newChild - the node to add
refChild - ignored
Returns:
never
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

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

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

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)
            throws DOMException
Remove a child node (always fails).
Parameters:
oldChild - the child node to remove
Returns:
never
See Also:
Node.removeChild

replaceChild

public Node replaceChild(Node newChild,
                         Node oldChild)
            throws DOMException
Replace a child node (always fails).
Parameters:
newChild - the node to add
oldChild - the child node to replace
Returns:
never
See Also:
Node.replaceChild

setNodeValue

public void setNodeValue(String value)
            throws DOMException
Change the namespace URI (always fails).
Parameters:
value - the new URI

setPrefix

public void setPrefix(String prefix)
            throws DOMException
Change the namespace prefix of this node (always fails).
Parameters:
prefix - the new prefix

setTextContent

public void setTextContent(String textContent)
            throws DOMException
Change the value of this node (always fails). This method is included solely for compatibility with the superclass.
Parameters:
textContent - the new content

setUserData

public Object setUserData(String key,
                          Object data,
                          org.w3c.dom.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