org.w3c.dom.Node Maven / Gradle / Ivy
/*
* Portions Copyright 2000-2008 Sun Microsystems, Inc. All Rights
* Reserved. Use is subject to license terms.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version
* 2 only, as published by the Free Software Foundation.
*
* 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 the GNU
* General Public License version 2 for more details (a copy is
* included at /legal/license.txt).
*
* You should have received a copy of the GNU General Public License
* version 2 along with this work; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
* Clara, CA 95054 or visit www.sun.com if you need additional
* information or have any questions.
*/
/*
* Copyright (c) 2004 World Wide Web Consortium,
*
* (Massachusetts Institute of Technology, European Research Consortium for
* Informatics and Mathematics, Keio University). All Rights Reserved. This
* work is distributed under the W3C(r) Software License [1] 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.
*
* [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
*/
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.
*
The values of nodeName
,
* nodeValue
, and attributes
vary according to the
* node type as follows:
*
*
* Interface
* nodeName
* nodeValue
* attributes
*
*
*
* Attr
* same as Attr.name
* same as
* Attr.value
* null
*
*
* CDATASection
*
* "#cdata-section"
* same as CharacterData.data
, the
* content of the CDATA Section
* null
*
*
* Comment
*
* "#comment"
* same as CharacterData.data
, the
* content of the comment
* null
*
*
* Document
*
* "#document"
* null
* null
*
*
*
* DocumentFragment
* "#document-fragment"
*
* null
* null
*
*
* DocumentType
* same as
* DocumentType.name
* null
* null
*
*
*
* Element
* same as Element.tagName
* null
*
* NamedNodeMap
*
*
* Entity
* entity name
* null
*
* null
*
*
* EntityReference
* name of entity referenced
*
* null
* null
*
*
* Notation
* notation name
*
* null
* null
*
*
* ProcessingInstruction
* same
* as ProcessingInstruction.target
* same as
* ProcessingInstruction.data
* null
*
*
* Text
*
* "#text"
* same as CharacterData.data
, the content
* of the text node
* null
*
*
* See also the Document Object Model (DOM) Level 2 Core Specification and the Document Object Model (DOM) Level 3 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.
* @return the name of this node
*/
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.
* @return a String containing the value of this node
* @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;
/**
* 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,
* including if the node is read-only.
* @param nodeValue the value of the node
* @exception DOMException
* NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly and if
* it is not defined to be null
.
*/
public void setNodeValue(String nodeValue)
throws DOMException;
/**
* A code representing the type of the underlying object, as defined above.
* @return A code representing the type of the underlying object
*/
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
.
* @return The parent of this node, or 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.
* @return A NodeList
that contains all children of this node.
*/
public NodeList getChildNodes();
/**
* The first child of this node. If there is no such node, this returns
* null
.
* @return The first child of this node or null
*/
public Node getFirstChild();
/**
* The last child of this node. If there is no such node, this returns
* null
.
* @return The last child of this node or null
.
*/
public Node getLastChild();
/**
* The node immediately preceding this node. If there is no such node,
* this returns null
.
* @return The node immediately preceding this node or null
*/
public Node getPreviousSibling();
/**
* The node immediately following this node. If there is no such node,
* this returns null
.
* @return The node immediately following this node or null
*/
public Node getNextSibling();
/**
* A NamedNodeMap
containing the attributes of this node (if
* it is an Element
) or null
otherwise.
* @return A NamedNodeMap
containing the attributes of this node, or null
*/
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
.
* @return The Document
object associated with this node, or null
* @since 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.
*
Note: Inserting a node before itself is implementation
* dependent.
* @param newChild The node to insert.
* @param refChild The 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 or this node
* itself, or if this node is of type Document
and the
* DOM application attempts to insert a second
* DocumentType
or Element
node.
*
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.
*
NOT_SUPPORTED_ERR: if this node is of type Document
,
* this exception might be raised if the DOM implementation doesn't
* support the insertion of a DocumentType
or
* Element
node.
* @since DOM Level 3
*/
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 newChild The new node to put in the child list.
* @param oldChild The 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 or this node
* itself, or if this node is of type Document
and the
* result of the replacement operation would add a second
* DocumentType
or Element
on the
* Document
node.
*
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.
*
NOT_SUPPORTED_ERR: if this node is of type Document
,
* this exception might be raised if the DOM implementation doesn't
* support the replacement of the DocumentType
child or
* Element
child.
* @since DOM Level 3
*/
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 oldChild The 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.
*
NOT_SUPPORTED_ERR: if this node is of type Document
,
* this exception might be raised if the DOM implementation doesn't
* support the removal of the DocumentType
child or the
* Element
child.
* @since DOM Level 3
*/
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 newChild The 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 or this node
* itself, or if this node is of type Document
and the
* DOM application attempts to append a second
* DocumentType
or Element
node.
*
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 previous parent of the node being inserted is readonly.
*
NOT_SUPPORTED_ERR: if the newChild
node is a child
* of the Document
node, this exception might be raised
* if the DOM implementation doesn't support the removal of the
* DocumentType
child or Element
child.
* @since DOM Level 3
*/
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
) and no user data. User
* data associated to the imported node is not carried over. However, if
* any UserDataHandlers
has been specified along with the
* associated data these handlers will be called with the appropriate
* parameters before this method returns.
*
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 children it
* contains unless it is a deep clone. This includes text contained in
* an the Element
since the text is contained in a child
* Text
node. Cloning an Attr
directly, as
* opposed to be cloned as part of an Element
cloning
* operation, returns a specified attribute (specified
is
* true
). Cloning an Attr
always clones its
* children, since they represent its value, no matter whether this is a
* deep clone or not. Cloning an EntityReference
* automatically constructs its subtree if a corresponding
* Entity
is available, no matter whether this is a deep
* clone or not. 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 deep If 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 [XPointer]
* lookups) that depend on a particular document tree
* structure are to be used.
*
Note: 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.
* @since DOM Level 2
*/
public void normalize();
/**
* Tests whether the DOM implementation implements a specific feature and
* that feature is supported by this node.
* @param feature The name of the feature to test. This is the same name
* which can be passed to the method hasFeature
on
* DOMImplementation
.
* @param version This 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 Document.createElement
, this is always
* null
.
*
Note: Per the Namespaces in XML Specification [XML Namespaces]
* 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.
* @return The namespace URI of this node, or null
* @since DOM Level 2
*/
public String getNamespaceURI();
/**
* The namespace prefix of this node, or null
if it is
* unspecified. When it is defined to be null
, setting it
* has no effect, including if the node is read-only.
*
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.
*
Setting the prefix to null
makes it unspecified,
* setting it to an empty string is implementation dependent.
*
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
.
* @return The namespace prefix of this node, or null
* @since DOM Level 2
*/
public String getPrefix();
/**
* The namespace prefix of this node, or null
if it is
* unspecified. When it is defined to be null
, setting it
* has no effect, including if the node is read-only.
* Note: This means that the value of the prefix is not changed
* and no exception is thrown in the case where the node is read-only.
*
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.
*
Setting the prefix to null
makes it unspecified,
* setting it to an empty string is implementation dependent.
*
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.
* Note: The prefix will thereby not be changed.
*
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
.
* Note: This also means that the implementation will not throw any
* exception.
*
* @param prefix This node namespace prefix.
* @exception DOMException
* INVALID_CHARACTER_ERR: Raised if the specified prefix contains an
* illegal character according to the XML version in use (1.0 for
* JSR 280).
*
NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
*
NAMESPACE_ERR: Raised if the specified prefix
is
* malformed per the Namespaces in XML specification, 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"
* [XML Namespaces].
* @since DOM Level 2
*/
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 Document.createElement
, this is always
* null
.
* @return the local part of the qualified name of this node
* @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();
/**
* This attribute returns the text content of this node and its
* descendants. When it is defined to be null
, setting it
* has no effect. On setting, any possible children this node may have
* are removed and, if it the new string is not empty or
* null
, replaced by a single Text
node
* containing the string this attribute is set to.
*
On getting, no serialization is performed, the returned string
* does not contain any markup. No whitespace normalization is performed
* and the returned string does not contain the white spaces in element
* content (see the attribute
* Text.isElementContentWhitespace
). Similarly, on setting,
* no parsing is performed either, the input string is taken as pure
* textual content.
*
The string returned is made of the text content of this node
* depending on its type, as defined below:
*
*
* Node type
* Content
*
*
*
* ELEMENT_NODE, ATTRIBUTE_NODE, ENTITY_NODE, ENTITY_REFERENCE_NODE,
* DOCUMENT_FRAGMENT_NODE
* concatenation of the textContent
* attribute value of every child node, excluding COMMENT_NODE and
* PROCESSING_INSTRUCTION_NODE nodes. This is the empty string if the
* node has no children.
*
*
* TEXT_NODE, CDATA_SECTION_NODE, COMMENT_NODE,
* PROCESSING_INSTRUCTION_NODE
* nodeValue
*
*
* DOCUMENT_NODE,
* DOCUMENT_TYPE_NODE, NOTATION_NODE
* null
*
*
* @return a String containing the text content of this node and its descendants
* @exception DOMException
* DOMSTRING_SIZE_ERR: Raised when it would return more characters than
* fit in a DOMString
variable on the implementation
* platform.
* @since DOM Level 3
*/
public String getTextContent()
throws DOMException;
/**
* This attribute returns the text content of this node and its
* descendants. When it is defined to be null
, setting it
* has no effect. On setting, any possible children this node may have
* are removed and, if it the new string is not empty or
* null
, replaced by a single Text
node
* containing the string this attribute is set to.
*
On getting, no serialization is performed, the returned string
* does not contain any markup. No whitespace normalization is performed
* and the returned string does not contain the white spaces in element
* content (see the attribute
* Text.isElementContentWhitespace
). Similarly, on setting,
* no parsing is performed either, the input string is taken as pure
* textual content.
*
The string returned is made of the text content of this node
* depending on its type, as defined below:
*
*
* Node type
* Content
*
*
*
* ELEMENT_NODE, ATTRIBUTE_NODE, ENTITY_NODE, ENTITY_REFERENCE_NODE,
* DOCUMENT_FRAGMENT_NODE
* concatenation of the textContent
* attribute value of every child node, excluding COMMENT_NODE and
* PROCESSING_INSTRUCTION_NODE nodes. This is the empty string if the
* node has no children.
*
*
* TEXT_NODE, CDATA_SECTION_NODE, COMMENT_NODE,
* PROCESSING_INSTRUCTION_NODE
* nodeValue
*
*
* DOCUMENT_NODE,
* DOCUMENT_TYPE_NODE, NOTATION_NODE
* null
*
*
* @param textContent a String containing the new text content for this node
* @exception DOMException
* NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly.
* @since DOM Level 3
*/
public void setTextContent(String textContent)
throws DOMException;
/**
* This method returns a specialized object which implements the
* specialized APIs of the specified feature and version, as specified
* in
* DOM Features. The specialized object may also be obtained by using
* binding-specific casting methods but is not necessarily expected to,
* as discussed in
* Mixed DOM Implementations. This method also allows the implementation
* to provide specialized objects which do not support the Node
* interface.
* Note: when using the methods that take a feature and a
* version as parameters, applications can use null or empty string
* for the version parameter if they don't wish to specify a particular
* version for the specified feature.
* @param feature The name of the feature requested. Note that any plus
* sign "+" prepended to the name of the feature will be ignored since
* it is not significant in the context of this method.
* @param version This is the version number of the feature to test.
* @return Returns an object which implements the specialized APIs of
* the specified feature and version, if any, or null
if
* there is no object which implements interfaces associated with that
* feature. If the DOMObject
returned by this method
* implements the Node
interface, it must delegate to the
* primary core Node
and not return results inconsistent
* with the primary core Node
such as attributes,
* childNodes, etc.
* @since DOM Level 3
*/
public Object getFeature(String feature,
String version);
/**
* Associate an object to a key on this node. The object can later be
* retrieved from this node by calling getUserData
with the
* same key.
* @param key The key to associate the object to.
* @param data The object to associate to the given key, or
* null
to remove any existing association to that key.
* @param handler The handler to associate to that key, or
* null
.
* @return Returns the DOMUserData
previously associated to
* the given key on this node, or null
if there was none.
* @since DOM Level 3
*/
public Object setUserData(String key,
Object data,
UserDataHandler handler);
/**
* Retrieves the object associated to a key on a this node. The object
* must first have been set to this node by calling
* setUserData
with the same key.
* @param key The key the object is associated to.
* @return Returns the DOMUserData
associated to the given
* key on this node, or null
if there was none.
* @since DOM Level 3
*/
public Object getUserData(String key);
}