org.apache.xerces.dom
public class CoreDocumentImpl extends ParentNode implements Document
Since elements, text nodes, comments, processing instructions, etc. cannot exist outside the context of a Document, the Document interface also contains the factory methods needed to create these objects. The Node objects created have a ownerDocument attribute which associates them with the Document within whose context they were created.
The CoreDocumentImpl class only implements the DOM Core. Additional modules are supported by the more complete DocumentImpl subclass.
Note: When any node in the document is serialized, the entire document is serialized along with it.
Since: PR-DOM-Level-1-19980818.
Version: $Id: CoreDocumentImpl.java,v 1.86 2005/06/13 21:08:07 nddelima Exp $
Field Summary | |
---|---|
protected String | actualEncoding Experimental DOM Level 3 feature: Document actualEncoding |
protected boolean | allowGrammarAccess Allow grammar access. |
protected int | changes
Number of alterations made to this document since its creation.
|
protected ElementImpl | docElement Document element. |
protected DocumentTypeImpl | docType Document type. |
protected String | encoding Experimental DOM Level 3 feature: Document encoding |
protected boolean | errorChecking Bypass error checking. |
protected String | fDocumentURI Experimental DOM Level 3 feature: documentURI |
protected Hashtable | identifiers Identifiers. |
protected boolean | standalone Experimental DOM Level 3 feature: Document standalone |
protected Hashtable | userData Table for user data attached to this document nodes. |
protected String | version Experimental DOM Level 3 feature: Document version |
protected boolean | xmlVersionChanged |
Constructor Summary | |
---|---|
CoreDocumentImpl()
NON-DOM: Actually creating a Document is outside the DOM's spec,
since it has to operate in terms of a particular implementation. | |
CoreDocumentImpl(boolean grammarAccess) Constructor. | |
CoreDocumentImpl(DocumentType doctype)
For DOM2 support.
| |
CoreDocumentImpl(DocumentType doctype, boolean grammarAccess) For DOM2 support. |
Method Summary | |
---|---|
void | abort()
DOM Level 3 WD - Experimental.
|
protected void | addEventListener(NodeImpl node, String type, EventListener listener, boolean useCapture) |
Node | adoptNode(Node source)
DOM Level 3 WD - Experimental
Change the node's ownerDocument, and its subtree, to this Document
|
protected void | changed()
Denotes that this node has changed. |
protected int | changes()
Returns the number of changes to this node. |
protected void | checkDOMNSErr(String prefix, String namespace) |
protected void | checkNamespaceWF(String qname, int colon1, int colon2)
Call user data handlers to let them know the nodes they are related to
are being deleted. |
protected void | checkQName(String prefix, String local)
Checks if the given qualified name is legal with respect
to the version of XML to which this document must conform.
|
protected void | clearIdentifiers()
Remove all identifiers from the ID table |
Object | clone() Clone. |
Node | cloneNode(boolean deep)
Deep-clone a document, including fixing ownerDoc for the cloned
children. |
protected void | cloneNode(CoreDocumentImpl newdoc, boolean deep)
internal method to share code with subclass
|
protected void | copyEventListeners(NodeImpl src, NodeImpl tgt) |
Attr | createAttribute(String name)
Factory method; creates an Attribute having this Document as its
OwnerDoc.
|
Attr | createAttributeNS(String namespaceURI, String qualifiedName)
Introduced in DOM Level 2. |
Attr | createAttributeNS(String namespaceURI, String qualifiedName, String localpart)
NON-DOM: a factory method used by the Xerces DOM parser
to create an element.
|
CDATASection | createCDATASection(String data)
Factory method; creates a CDATASection having this Document as
its OwnerDoc.
|
Comment | createComment(String data)
Factory method; creates a Comment having this Document as its
OwnerDoc.
|
DocumentFragment | createDocumentFragment()
Factory method; creates a DocumentFragment having this Document
as its OwnerDoc. |
DocumentType | createDocumentType(String qualifiedName, String publicID, String systemID)
NON-DOM
Factory method; creates a DocumentType having this Document
as its OwnerDoc. |
Element | createElement(String tagName)
Factory method; creates an Element having this Document
as its OwnerDoc.
|
ElementDefinitionImpl | createElementDefinition(String name)
NON-DOM Factory method: creates an element definition. |
Element | createElementNS(String namespaceURI, String qualifiedName)
Introduced in DOM Level 2. |
Element | createElementNS(String namespaceURI, String qualifiedName, String localpart)
NON-DOM: a factory method used by the Xerces DOM parser
to create an element.
|
Entity | createEntity(String name)
NON-DOM
Factory method; creates an Entity having this Document
as its OwnerDoc. |
EntityReference | createEntityReference(String name)
Factory method; creates an EntityReference having this Document
as its OwnerDoc.
|
Notation | createNotation(String name)
NON-DOM
Factory method; creates a Notation having this Document
as its OwnerDoc. |
ProcessingInstruction | createProcessingInstruction(String target, String data)
Factory method; creates a ProcessingInstruction having this Document
as its OwnerDoc.
|
Text | createTextNode(String data)
Factory method; creates a Text node having this Document as its
OwnerDoc.
|
protected boolean | dispatchEvent(NodeImpl node, Event event) |
boolean | getAsync()
DOM Level 3 WD - Experimental.
|
String | getBaseURI()
Returns the absolute base URI of this node or null if the implementation
wasn't able to obtain an absolute URI. |
DocumentType | getDoctype()
For XML, this provides access to the Document Type Definition.
|
Element | getDocumentElement()
Convenience method, allowing direct access to the child node
which is considered the root of the actual document content. |
String | getDocumentURI()
DOM Level 3 WD - Experimental.
|
DOMConfiguration | getDomConfig()
DOM Level 3 CR - Experimental
The configuration used when Document.normalizeDocument is
invoked. |
Element | getElementById(String elementId)
Introduced in DOM Level 2
Returns the Element whose ID is given by elementId. |
NodeList | getElementsByTagName(String tagname)
Return a live collection of all descendent Elements (not just
immediate children) having the specified tag name.
|
NodeList | getElementsByTagNameNS(String namespaceURI, String localName)
Introduced in DOM Level 2. |
String | getEncoding() |
boolean | getErrorChecking()
Returns true if the DOM implementation performs error checking. |
Object | getFeature(String feature, String version) |
Element | getIdentifier(String idName)
Returns a previously registered element with the specified
identifier name, or null if no element is registered.
|
Enumeration | getIdentifiers() Returns an enumeration registered of identifier names. |
DOMImplementation | getImplementation()
Retrieve information describing the abilities of this particular
DOM implementation. |
String | getInputEncoding()
DOM Level 3 CR - Experimental. |
String | getNodeName() Returns the node name. |
protected int | getNodeNumber() NON-DOM: Get the number associated with this document. |
protected int | getNodeNumber(Node node) NON-DOM: Get a number associated with a node created with respect
to this document. |
short | getNodeType() Returns the node type. |
Document | getOwnerDocument() |
boolean | getStandalone() |
boolean | getStrictErrorChecking() |
String | getTextContent() |
Object | getUserData(Node n, String key)
Retrieves the object associated to a key on a this node. |
protected Object | getUserData(NodeImpl n)
NON-DOM: kept for backward compatibility
Retreive user data related to a given node |
protected Hashtable | getUserDataRecord(Node n) |
String | getVersion() |
String | getXmlEncoding()
DOM Level 3 WD - Experimental.
|
boolean | getXmlStandalone()
DOM Level 3 WD - Experimental.
standalone that specifies whether this document is standalone
(part of XML Declaration) |
String | getXmlVersion()
DOM Level 3 WD - Experimental.
|
Node | importNode(Node source, boolean deep)
Copies a node from another document to this document. |
Node | insertBefore(Node newChild, Node refChild)
Since a Document may contain at most one top-level Element child,
and at most one DocumentType declaraction, we need to subclass our
add-children methods to implement this constraint.
|
protected boolean | isKidOK(Node parent, Node child)
Uses the kidOK lookup table to check whether the proposed
tree structure is legal. |
static boolean | isValidQName(String prefix, String local, boolean xml11Version)
Checks if the given qualified name is legal with respect
to the version of XML to which this document must conform.
|
static boolean | isXMLName(String s, boolean xml11Version)
Check the string against XML's definition of acceptable names for
elements and attributes and so on using the XMLCharacterProperties
utility class |
boolean | load(String uri)
DOM Level 3 WD - Experimental.
|
boolean | loadXML(String source)
DOM Level 3 WD - Experimental.
|
void | normalizeDocument()
DOM Level 3 WD - Experimental
Normalize document. |
void | putIdentifier(String idName, Element element)
Registers an identifier name with a specified element node.
|
Node | removeChild(Node oldChild)
Since insertBefore caches the docElement (and, currently, docType),
removeChild has to know how to undo the cache
REVISIT: According to the spec it is not allowed to alter neither the
document element nor the document type in any way |
protected void | removeEventListener(NodeImpl node, String type, EventListener listener, boolean useCapture) |
void | removeIdentifier(String idName)
Removes a previously registered element with the specified
identifier name.
|
Node | renameNode(Node n, String namespaceURI, String name)
DOM Level 3 WD - Experimental.
|
Node | replaceChild(Node newChild, Node oldChild)
Since we cache the docElement (and, currently, docType),
replaceChild has to update the cache
REVISIT: According to the spec it is not allowed to alter neither the
document element nor the document type in any way |
String | saveXML(Node node)
DOM Level 3 WD - Experimental.
|
void | setAsync(boolean async)
DOM Level 3 WD - Experimental.
|
void | setDocumentURI(String documentURI)
DOM Level 3 WD - Experimental. |
void | setEncoding(String value) |
void | setErrorChecking(boolean check)
Sets whether the DOM implementation performs error checking
upon operations. |
void | setInputEncoding(String value)
DOM Internal
(Was a DOM L3 Core WD public interface method setActualEncoding )
An attribute specifying the actual encoding of this document. |
void | setStandalone(boolean value) |
void | setStrictErrorChecking(boolean check) |
void | setTextContent(String textContent) |
Object | setUserData(Node n, String key, Object data, UserDataHandler handler)
Associate an object to a key on this node. |
protected void | setUserData(NodeImpl n, Object data)
NON-DOM: kept for backward compatibility
Store user data related to a given node
This is a place where we could use weak references! |
void | setVersion(String value) |
void | setXmlEncoding(String value)
DOM Internal
(Was a DOM L3 Core WD public interface method setXMLEncoding )
An attribute specifying, as part of the XML declaration,
the encoding of this document. |
void | setXmlStandalone(boolean value)
DOM Level 3 CR - Experimental.
|
void | setXmlVersion(String value)
DOM Level 3 CR - Experimental.
version - An attribute specifying, as part of the XML declaration,
the version number of this document. |
protected void | undeferChildren(Node node)
Traverses the DOM Tree and expands deferred nodes and their
children.
|
Any method that alters the tree structure MUST cause or be accompanied by a call to changed(), to inform it that any outstanding NodeLists may have to be updated.
(Required because NodeList is simultaneously "live" and integer- indexed -- a bad decision in the DOM's design.)
Note that changes which do not affect the tree's structure -- changing the node's name, for example -- do _not_ have to call changed().
Alternative implementation would be to use a cryptographic Digest value rather than a count. This would have the advantage that "harmless" changes (those producing equal() trees) would not force NodeList to resynchronize. Disadvantage is that it's slightly more prone to "false negatives", though that's the difference between "wildly unlikely" and "absurdly unlikely". IF we start maintaining digests, we should consider taking advantage of them. Note: This used to be done a node basis, so that we knew what subtree changed. But since only DeepNodeList really use this today, the gain appears to be really small compared to the cost of having an int on every (parent) node plus having to walk up the tree all the way to the root to mark the branch as changed everytime a node is changed. So we now have a single counter global to the document. It means that some objects may flush their cache more often than necessary, but this makes nodes smaller and only the document needs to be marked as changed.
load
being invoked the loading and parsing is
immediately aborted. The possibly partial result of parsing the
document is discarded and the document is cleared.Parameters: source The node to adopt.
See Also: CoreDocumentImpl
Parameters: prefix prefix of qualified name local local part of qualified name
Parameters: deep boolean, iff true replicate children
Returns: org.w3c.dom.Node
Parameters: name The name of the attribute. Note that the attribute's value is _not_ established at the factory; remember to set it!
Throws: DOMException(INVALID_NAME_ERR) if the attribute name is not acceptable.
Creates an attribute of the given qualified name and namespace URI. If the given namespaceURI is null or an empty string and the qualifiedName has a prefix that is "xml", the created element is bound to the predefined namespace "http://www.w3.org/XML/1998/namespace" [Namespaces].
Parameters: namespaceURI The namespace URI of the attribute to create. When it is null or an empty string, this method behaves like createAttribute. qualifiedName The qualified name of the attribute to instantiate.
Returns: Attr A new Attr object.
Throws: DOMException INVALID_CHARACTER_ERR: Raised if the specified name contains an invalid character.
Since: WD-DOM-Level-2-19990923
Parameters: namespaceURI The namespace URI of the attribute to create. When it is null or an empty string, this method behaves like createAttribute. qualifiedName The qualified name of the attribute to instantiate. localpart The local name of the attribute to instantiate.
Returns: Attr A new Attr object.
Throws: DOMException INVALID_CHARACTER_ERR: Raised if the specified name contains an invalid character.
Parameters: data The initial contents of the CDATA
Throws: DOMException(NOT_SUPPORTED_ERR) for HTML documents. (HTML not yet implemented.)
Parameters: data The initial contents of the Comment.
Parameters: name The name of the Entity we wish to provide a value for.
Throws: DOMException(NOT_SUPPORTED_ERR) for HTML documents, where DTDs are not permitted. (HTML not yet implemented.)
Parameters: tagName The name of the element type to instantiate. For XML, this is case-sensitive. For HTML, the tagName parameter may be provided in any case, but it must be mapped to the canonical uppercase form by the DOM implementation.
Throws: DOMException(INVALID_NAME_ERR) if the tag name is not acceptable.
Creates an element of the given qualified name and namespace URI. If the given namespaceURI is null or an empty string and the qualifiedName has a prefix that is "xml", the created element is bound to the predefined namespace "http://www.w3.org/XML/1998/namespace" [Namespaces].
Parameters: namespaceURI The namespace URI of the element to create. qualifiedName The qualified name of the element type to instantiate.
Returns: Element A new Element object with the following attributes:
Throws: DOMException INVALID_CHARACTER_ERR: Raised if the specified name contains an invalid character. DOMException NAMESPACE_ERR: Raised if the qualifiedName has a prefix that is "xml" and the namespaceURI is neither null nor an empty string nor "http://www.w3.org/XML/1998/namespace", or if the qualifiedName has a prefix different from "xml" and the namespaceURI is null or an empty string.
Since: WD-DOM-Level-2-19990923
Parameters: namespaceURI The namespace URI of the element to create. qualifiedName The qualified name of the element type to instantiate. localpart The local name of the attribute to instantiate.
Returns: Element A new Element object with the following attributes:
Throws: DOMException INVALID_CHARACTER_ERR: Raised if the specified name contains an invalid character.
Parameters: name The name of the Entity we wish to provide a value for.
Throws: DOMException(NOT_SUPPORTED_ERR) for HTML documents, where nonstandard entities are not permitted. (HTML not yet implemented.)
Parameters: name The name of the Entity we wish to refer to
Throws: DOMException(NOT_SUPPORTED_ERR) for HTML documents, where nonstandard entities are not permitted. (HTML not yet implemented.)
Parameters: name The name of the Notation we wish to describe
Throws: DOMException(NOT_SUPPORTED_ERR) for HTML documents, where notations are not permitted. (HTML not yet implemented.)
Parameters: target The target "processor channel" data Parameter string to be passed to the target.
Throws: DOMException(INVALID_NAME_ERR) if the target name is not acceptable. DOMException(NOT_SUPPORTED_ERR) for HTML documents. (HTML not yet implemented.)
Parameters: data The initial contents of the Text.
true
the load method returns control to the caller before the document has
completed loading. The default value of this property is
false
.
false
but we
need to check with Mozilla and IE.Returns: The absolute base URI of this node or null.
Since: DOM Level 3
null
if undefined.
Document
supports the feature
"HTML" , the href attribute of the HTML BASE element takes precedence
over this attribute.Since: DOM Level 3
Document.normalizeDocument
is
invoked.Since: DOM Level 3
Note: The DOM implementation must have information that says which attributes are of type ID. Attributes with the name "ID" are not of type ID unless so defined. Implementations that do not know whether attributes are of type ID or not are expected to return null.
See Also: CoreDocumentImpl
Parameters: tagname The type of Element we want to gather. "*" will be taken as a wildcard, meaning "all elements in the document."
See Also: DeepNodeListImpl
Returns a NodeList of all the Elements with a given local name and namespace URI in the order in which they would be encountered in a preorder traversal of the Document tree.
Parameters: namespaceURI The namespace URI of the elements to match on. The special value "*" matches all namespaces. When it is null or an empty string, this method behaves like getElementsByTagName. localName The local name of the elements to match on. The special value "*" matches all local names.
Returns: NodeList A new NodeList object containing all the matched Elements.
Since: WD-DOM-Level-2-19990923
Deprecated: This method is internal and only exists for compatibility with older applications. New applications should never call this method.
Since: DOM Level 3
See Also: CoreDocumentImpl CoreDocumentImpl
null
when
it is not known, such as when the Document
was
created in memory.Since: DOM Level 3
Deprecated: This method is internal and only exists for compatibility with older applications. New applications should never call this method.
setUserData
with the same key.Parameters: n The node the object is associated to. key The key the object is associated to.
Returns: Returns the DOMObject
associated to the given key
on this node, or null
if there was none.
Since: DOM Level 3
Deprecated: This method is internal and only exists for compatibility with older applications. New applications should never call this method.
According to the DOM specifications, document nodes cannot be imported and a NOT_SUPPORTED_ERR exception is thrown if attempted.
While I'm doing so, I've taken advantage of the opportunity to cache documentElement and docType so we don't have to search for them. REVISIT: According to the spec it is not allowed to alter neither the document element nor the document type in any way
Parameters: prefix prefix of qualified name local local part of qualified name
Event.targetNode
will be the document,
not an element) will be dispatched on the document. If an error
occurs, an implementation dependent "error" event will be dispatched
on the document. If this method is called on a document that is
currently loading, the current load is interrupted and the new URI
load is initiated.
DOMParser
interface are assumed to have their default
values with the exception that the parameters "entities"
, "normalize-characters"
,
"check-character-normalization"
are set to
"false"
.
DOMParser.parseWithContext
with an input stream
referencing the URI that was passed to this call, the document as the
context node, and the action ACTION_REPLACE_CHILDREN
.Parameters: uri The URI reference for the XML file to be loaded. If this is a relative URI, the base URI used by the implementation is implementation dependent.
Returns: If async is set to true
load
returns
true
if the document load was successfully initiated.
If an error occurred when initiating the document load,
load
returns false
.If async is set to
false
load
returns true
if
the document was successfully loaded and parsed. If an error
occurred when either loading or parsing the URI, load
returns false
.
Parameters: source A string containing an XML document.
Returns: true
if parsing the input string succeeded
without errors, otherwise false
.
See Also: CoreDocumentImpl CoreDocumentImpl
See Also: CoreDocumentImpl CoreDocumentImpl
LSSerializer
interface are
assumed to have their default values when invoking this method.
LSSerializer.writeToString
with the document as
the node to write.Parameters: node Specifies what to serialize, if this parameter is
null
the whole document is serialized, if it's
non-null the given node is serialized.
Returns: The serialized document or null
in case an error
occurred.
Throws: DOMException WRONG_DOCUMENT_ERR: Raised if the node passed in as the node parameter is from an other document.
true
the load method returns control to the caller before the document has
completed loading. The default value of this property is
false
.
false
but we
need to check with Mozilla and IE.Deprecated: This method is internal and only exists for compatibility with older applications. New applications should never call this method.
Turning off error checking does not turn off the following checks:
null
otherwise.
Deprecated: This method is internal and only exists for compatibility with older applications. New applications should never call this method.
getUserData
with the
same key.Parameters: n The node to associate the object to. key The key to associate the object to. data The object to associate to the given key, or
null
to remove any existing association to that key. handler The handler to associate to that key, or
null
.
Returns: Returns the DOMObject
previously associated to
the given key on this node, or null
if there was none.
Since: DOM Level 3 REVISIT: we could use a free list of UserDataRecord here
Deprecated: This method is internal and only exists for compatibility with older applications. New applications should never call this method.
Throws: DOMException NOT_SUPPORTED_ERR: Raised if this document does not support the "XML" feature.
Since: DOM Level 3