/*
* Copyright (c) 2000 World Wide Web Consortium,
* (Massachusetts Institute of Technology, Institut National de
* Recherche en Informatique et en Automatique, Keio University). All
* Rights Reserved. This program is distributed under the W3C's Software
* Intellectual Property License. This program is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE.
* See W3C License http://www.w3.org/Consortium/Legal/ for more details.
*/
package org.w3c.dom;
/**
* The Node
interface is the primary datatype for the entire
* Document Object Model. It represents a single node in the document tree.
* While all objects implementing the Node
interface expose
* methods for dealing with children, not all objects implementing the
* Node
interface may have children. For example,
* Text
nodes may not have children, and adding children to
* such nodes results in a DOMException
being raised.
*
The attributes nodeName
, nodeValue
and
* attributes
are included as a mechanism to get at node
* information without casting down to the specific derived interface. In
* cases where there is no obvious mapping of these attributes for a
* specific nodeType
(e.g., nodeValue
for an
* Element
or attributes
for a Comment
* ), this returns null
. Note that the specialized interfaces
* may contain additional and more convenient mechanisms to get and set the
* relevant information.
*
See also the Document Object Model (DOM) Level 2 Core Specification.
*/
public interface Node {
// NodeType
/**
* The node is an Element
.
*/
public static final short ELEMENT_NODE = 1;
/**
* The node is an Attr
.
*/
public static final short ATTRIBUTE_NODE = 2;
/**
* The node is a Text
node.
*/
public static final short TEXT_NODE = 3;
/**
* The node is a CDATASection
.
*/
public static final short CDATA_SECTION_NODE = 4;
/**
* The node is an EntityReference
.
*/
public static final short ENTITY_REFERENCE_NODE = 5;
/**
* The node is an Entity
.
*/
public static final short ENTITY_NODE = 6;
/**
* The node is a ProcessingInstruction
.
*/
public static final short PROCESSING_INSTRUCTION_NODE = 7;
/**
* The node is a Comment
.
*/
public static final short COMMENT_NODE = 8;
/**
* The node is a Document
.
*/
public static final short DOCUMENT_NODE = 9;
/**
* The node is a DocumentType
.
*/
public static final short DOCUMENT_TYPE_NODE = 10;
/**
* The node is a DocumentFragment
.
*/
public static final short DOCUMENT_FRAGMENT_NODE = 11;
/**
* The node is a Notation
.
*/
public static final short NOTATION_NODE = 12;
/**
* The name of this node, depending on its type; see the table above.
*/
public String getNodeName();
/**
* The value of this node, depending on its type; see the table above.
* When it is defined to be null
, setting it has no effect.
* @exception DOMException
* NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly.
* @exception DOMException
* DOMSTRING_SIZE_ERR: Raised when it would return more characters than
* fit in a DOMString
variable on the implementation
* platform.
*/
public String getNodeValue()
throws DOMException;
public void setNodeValue(String nodeValue)
throws DOMException;
/**
* A code representing the type of the underlying object, as defined above.
*/
public short getNodeType();
/**
* The parent of this node. All nodes, except Attr
,
* Document
, DocumentFragment
,
* Entity
, and Notation
may have a parent.
* However, if a node has just been created and not yet added to the
* tree, or if it has been removed from the tree, this is
* null
.
*/
public Node getParentNode();
/**
* A NodeList
that contains all children of this node. If
* there are no children, this is a NodeList
containing no
* nodes.
*/
public NodeList getChildNodes();
/**
* The first child of this node. If there is no such node, this returns
* null
.
*/
public Node getFirstChild();
/**
* The last child of this node. If there is no such node, this returns
* null
.
*/
public Node getLastChild();
/**
* The node immediately preceding this node. If there is no such node,
* this returns null
.
*/
public Node getPreviousSibling();
/**
* The node immediately following this node. If there is no such node,
* this returns null
.
*/
public Node getNextSibling();
/**
* A NamedNodeMap
containing the attributes of this node (if
* it is an Element
) or null
otherwise.
*/
public NamedNodeMap getAttributes();
/**
* The Document
object associated with this node. This is
* also the Document
object used to create new nodes. When
* this node is a Document
or a DocumentType
* which is not used with any Document
yet, this is
* null
.
* @version DOM Level 2
*/
public Document getOwnerDocument();
/**
* Inserts the node newChild
before the existing child node
* refChild
. If refChild
is null
,
* insert newChild
at the end of the list of children.
*
If newChild
is a DocumentFragment
object,
* all of its children are inserted, in the same order, before
* refChild
. If the newChild
is already in the
* tree, it is first removed.
* @param newChildThe node to insert.
* @param refChildThe reference node, i.e., the node before which the new
* node must be inserted.
* @return The node being inserted.
* @exception DOMException
* HIERARCHY_REQUEST_ERR: Raised if this node is of a type that does not
* allow children of the type of the newChild
node, or if
* the node to insert is one of this node's ancestors.
*
WRONG_DOCUMENT_ERR: Raised if newChild
was created
* from a different document than the one that created this node.
*
NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly or
* if the parent of the node being inserted is readonly.
*
NOT_FOUND_ERR: Raised if refChild
is not a child of
* this node.
*/
public Node insertBefore(Node newChild,
Node refChild)
throws DOMException;
/**
* Replaces the child node oldChild
with newChild
* in the list of children, and returns the oldChild
node.
*
If newChild
is a DocumentFragment
object,
* oldChild
is replaced by all of the
* DocumentFragment
children, which are inserted in the
* same order. If the newChild
is already in the tree, it
* is first removed.
* @param newChildThe new node to put in the child list.
* @param oldChildThe node being replaced in the list.
* @return The node replaced.
* @exception DOMException
* HIERARCHY_REQUEST_ERR: Raised if this node is of a type that does not
* allow children of the type of the newChild
node, or if
* the node to put in is one of this node's ancestors.
*
WRONG_DOCUMENT_ERR: Raised if newChild
was created
* from a different document than the one that created this node.
*
NO_MODIFICATION_ALLOWED_ERR: Raised if this node or the parent of
* the new node is readonly.
*
NOT_FOUND_ERR: Raised if oldChild
is not a child of
* this node.
*/
public Node replaceChild(Node newChild,
Node oldChild)
throws DOMException;
/**
* Removes the child node indicated by oldChild
from the list
* of children, and returns it.
* @param oldChildThe node being removed.
* @return The node removed.
* @exception DOMException
* NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
*
NOT_FOUND_ERR: Raised if oldChild
is not a child of
* this node.
*/
public Node removeChild(Node oldChild)
throws DOMException;
/**
* Adds the node newChild
to the end of the list of children
* of this node. If the newChild
is already in the tree, it
* is first removed.
* @param newChildThe node to add.If it is a DocumentFragment
* object, the entire contents of the document fragment are moved
* into the child list of this node
* @return The node added.
* @exception DOMException
* HIERARCHY_REQUEST_ERR: Raised if this node is of a type that does not
* allow children of the type of the newChild
node, or if
* the node to append is one of this node's ancestors.
*
WRONG_DOCUMENT_ERR: Raised if newChild
was created
* from a different document than the one that created this node.
*
NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
*/
public Node appendChild(Node newChild)
throws DOMException;
/**
* Returns whether this node has any children.
* @return true
if this node has any children,
* false
otherwise.
*/
public boolean hasChildNodes();
/**
* Returns a duplicate of this node, i.e., serves as a generic copy
* constructor for nodes. The duplicate node has no parent; (
* parentNode
is null
.).
*
Cloning an Element
copies all attributes and their
* values, including those generated by the XML processor to represent
* defaulted attributes, but this method does not copy any text it
* contains unless it is a deep clone, since the text is contained in a
* child Text
node. Cloning an Attribute
* directly, as opposed to be cloned as part of an Element
* cloning operation, returns a specified attribute (
* specified
is true
). Cloning any other type
* of node simply returns a copy of this node.
*
Note that cloning an immutable subtree results in a mutable copy,
* but the children of an EntityReference
clone are readonly
* . In addition, clones of unspecified Attr
nodes are
* specified. And, cloning Document
,
* DocumentType
, Entity
, and
* Notation
nodes is implementation dependent.
* @param deepIf true
, recursively clone the subtree under
* the specified node; if false
, clone only the node
* itself (and its attributes, if it is an Element
).
* @return The duplicate node.
*/
public Node cloneNode(boolean deep);
/**
* Puts all Text
nodes in the full depth of the sub-tree
* underneath this Node
, including attribute nodes, into a
* "normal" form where only structure (e.g., elements, comments,
* processing instructions, CDATA sections, and entity references)
* separates Text
nodes, i.e., there are neither adjacent
* Text
nodes nor empty Text
nodes. This can
* be used to ensure that the DOM view of a document is the same as if
* it were saved and re-loaded, and is useful when operations (such as
* XPointer lookups) that depend on a particular document tree
* structure are to be used.In cases where the document contains
* CDATASections
, the normalize operation alone may not be
* sufficient, since XPointers do not differentiate between
* Text
nodes and CDATASection
nodes.
* @version DOM Level 2
*/
public void normalize();
/**
* Tests whether the DOM implementation implements a specific feature and
* that feature is supported by this node.
* @param featureThe name of the feature to test. This is the same name
* which can be passed to the method hasFeature
on
* DOMImplementation
.
* @param versionThis is the version number of the feature to test. In
* Level 2, version 1, this is the string "2.0". If the version is not
* specified, supporting any version of the feature will cause the
* method to return true
.
* @return Returns true
if the specified feature is
* supported on this node, false
otherwise.
* @since DOM Level 2
*/
public boolean isSupported(String feature,
String version);
/**
* The namespace URI of this node, or null
if it is
* unspecified.
*
This is not a computed value that is the result of a namespace
* lookup based on an examination of the namespace declarations in
* scope. It is merely the namespace URI given at creation time.
*
For nodes of any type other than ELEMENT_NODE
and
* ATTRIBUTE_NODE
and nodes created with a DOM Level 1
* method, such as createElement
from the
* Document
interface, this is always null
.Per
* the Namespaces in XML Specification an attribute does not inherit
* its namespace from the element it is attached to. If an attribute is
* not explicitly given a namespace, it simply has no namespace.
* @since DOM Level 2
*/
public String getNamespaceURI();
/**
* The namespace prefix of this node, or null
if it is
* unspecified.
*
Note that setting this attribute, when permitted, changes the
* nodeName
attribute, which holds the qualified name, as
* well as the tagName
and name
attributes of
* the Element
and Attr
interfaces, when
* applicable.
*
Note also that changing the prefix of an attribute that is known to
* have a default value, does not make a new attribute with the default
* value and the original prefix appear, since the
* namespaceURI
and localName
do not change.
*
For nodes of any type other than ELEMENT_NODE
and
* ATTRIBUTE_NODE
and nodes created with a DOM Level 1
* method, such as createElement
from the
* Document
interface, this is always null
.
* @exception DOMException
* INVALID_CHARACTER_ERR: Raised if the specified prefix contains an
* illegal character.
*
NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
*
NAMESPACE_ERR: Raised if the specified prefix
is
* malformed, if the namespaceURI
of this node is
* null
, if the specified prefix is "xml" and the
* namespaceURI
of this node is different from "
* http://www.w3.org/XML/1998/namespace", if this node is an attribute
* and the specified prefix is "xmlns" and the
* namespaceURI
of this node is different from "
* http://www.w3.org/2000/xmlns/", or if this node is an attribute and
* the qualifiedName
of this node is "xmlns" .
* @since DOM Level 2
*/
public String getPrefix();
public void setPrefix(String prefix)
throws DOMException;
/**
* Returns the local part of the qualified name of this node.
*
For nodes of any type other than ELEMENT_NODE
and
* ATTRIBUTE_NODE
and nodes created with a DOM Level 1
* method, such as createElement
from the
* Document
interface, this is always null
.
* @since DOM Level 2
*/
public String getLocalName();
/**
* Returns whether this node (if it is an element) has any attributes.
* @return true
if this node has any attributes,
* false
otherwise.
* @since DOM Level 2
*/
public boolean hasAttributes();
}