domelement.java

来自「kaffe Java 解释器语言,源码,Java的子集系统,开放源代码」· Java 代码 · 共 340 行

JAVA
340
字号
/* * Copyright (C) 1999-2001 David Brownell *  * This file is part of GNU JAXP, a library. * * GNU JAXP is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. *  * GNU JAXP 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 for more details. *  * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA * * As a special exception, if you link this library with other files to * produce an executable, this library does not by itself cause the * resulting executable to be covered by the GNU General Public License. * This exception does not however invalidate any other reasons why the * executable file might be covered by the GNU General Public License.  */package gnu.xml.dom;import org.w3c.dom.*;/** * <p> "Element" implementation. * * @author David Brownell  */public class DomElement extends DomNsNode implements Element{    // Attributes are VERY expensive in DOM, and not just for    // this implementation.  Avoid creating them.    private DomNamedNodeMap	attributes;    /**     * Constructs an Element node associated with the specified document.     *     * <p>This constructor should only be invoked by a Document as part     * of its createElement functionality, or through a subclass which is     * similarly used in a "Sub-DOM" style layer.     *     * @param owner The document with which this node is associated     * @param namespaceURI Combined with the local part of the name,     *	this is used to uniquely identify a type of element     * @param name Name of this element, which may include a prefix     */    protected DomElement (Document owner, String namespaceURI, String name)    {	super (owner, namespaceURI, name);    }    /**     * <b>DOM L1</b>     * Returns the element's attributes     */    public NamedNodeMap getAttributes ()    {	if (attributes == null)	    attributes = new DomNamedNodeMap (getOwnerDocument (), this);	return attributes;    }    /**     * <b>DOM L2></b>     * Returns true iff this is an element node with attributes.     */    public boolean hasAttributes ()	{ return attributes != null && attributes.getLength () != 0; }    /**     * Shallow clone of the element, except that associated     * attributes are (deep) cloned.     */    public Object clone ()    {	DomElement	retval = (DomElement) super.clone ();	DomNamedNodeMap	atts;	if (attributes == null)	    return retval;	atts = new DomNamedNodeMap (getOwnerDocument (), retval);	retval.attributes = atts;	for (int i = 0; i < attributes.getLength (); i++) {	    Node	temp = attributes.item (i);	    temp = temp.cloneNode (true);	    atts.setNamedItem (temp);	}	return retval;    }    /**     * Marks this element, its children, and its associated attributes as     * readonly.     */    public void makeReadonly ()    {	super.makeReadonly ();	if (attributes != null)	    attributes.makeReadonly ();    }    /**     * <b>DOM L1</b>     * Returns the element name (same as getNodeName).     */    final public String getTagName ()    {	return getNodeName ();    }    /**     * <b>DOM L1</b>     * Returns the constant ELEMENT_NODE.     */    final public short getNodeType ()	{ return ELEMENT_NODE; }    /**     * <b>DOM L1</b>     * Returns the value of the specified attribute, or an     * empty string.     */    public String getAttribute (String name)    {	Attr attr = getAttributeNode (name);	if (attr == null)	    return "";	else	    return attr.getValue ();    }    /**     * <b>DOM L2</b>     * Returns true if the element has an attribute with the     * specified name (specified or DTD defaulted).     */    public boolean hasAttribute (String name)    {	return getAttributeNode (name) != null;    }    /**     * <b>DOM L2</b>     * Returns true if the element has an attribute with the     * specified name (specified or DTD defaulted).     */    public boolean hasAttributeNS (String namespaceURI, String local)    {	return getAttributeNodeNS (namespaceURI, local) != null;    }    /**     * <b>DOM L2</b>     * Returns the value of the specified attribute, or an     * empty string.     */    public String getAttributeNS (String namespaceURI, String local)    {	Attr attr = getAttributeNodeNS (namespaceURI, local);	if (attr == null)	    return "";	else	    return attr.getValue ();    }    /**     * <b>DOM L1</b>     * Returns the appropriate attribute node; the name is the     * nodeName property of the attribute.     */    public Attr getAttributeNode (String name)    {	if (attributes == null)	    return null;	return (Attr) attributes.getNamedItem (name);    }    /**     * <b>DOM L2</b>     * Returns the appropriate attribute node; the name combines     * the namespace name and the local part.     */    public Attr getAttributeNodeNS (String namespace, String localPart)    {	if (attributes == null)	    return null;	return (Attr) attributes.getNamedItemNS (namespace, localPart);    }    /**     * <b>DOM L1</b>     * Modifies an existing attribute to have the specified value,     * or creates a new one with that value.  The name used is the     * nodeName value.      */    public void setAttribute (String name, String value)    {	Attr attr = getAttributeNode (name);	if (attr != null) {	    attr.setNodeValue (value);	    return;	}	attr = getOwnerDocument ().createAttribute (name);	attr.setNodeValue (value);	setAttributeNode (attr);    }    /**     * <b>DOM L2</b>     * Modifies an existing attribute to have the specified value,     * or creates a new one with that value.     */    public void setAttributeNS (String uri, String aname, String value)    {	if (("xmlns".equals (aname) || aname.startsWith ("xmlns:"))		&& !DomDocument.xmlnsURI.equals (uri))	    throw new DomEx (DomEx.NAMESPACE_ERR,		"setting xmlns attribute to illegal value", this, 0);	Attr attr = getAttributeNodeNS (uri, aname);	if (attr != null) {	    attr.setNodeValue (value);	    return;	}	attr = getOwnerDocument ().createAttributeNS (uri, aname);	attr.setNodeValue (value);	setAttributeNodeNS (attr);    }    /**     * <b>DOM L1</b>     * Stores the specified attribute, optionally overwriting any     * existing one with that name.     */    public Attr setAttributeNode (Attr attr)    {	return (Attr) getAttributes ().setNamedItem (attr);    }    /**     * <b>DOM L2</b>     * Stores the specified attribute, optionally overwriting any     * existing one with that name.     */    public Attr setAttributeNodeNS (Attr attr)    {	return (Attr) getAttributes ().setNamedItemNS (attr);    }    /**     * <b>DOM L1</b>     * Removes the appropriate attribute node.     * If there is no such node, this is (bizarrely enough) a NOP so you     * won't see exceptions if your code deletes non-existent attributes.     *     * <p>Note that since there is no portable way for DOM to record     * DTD information, default values for attributes will never be     * provided automatically.     */    public void removeAttribute (String name)    {	if (attributes == null)	    return;	    // throw new DomEx (DomEx.NOT_FOUND_ERR, name, null, 0);	try {	    attributes.removeNamedItem (name);	} catch (DomEx e) {	    if (e.code == DomEx.NOT_FOUND_ERR)		return;	}    }    /**     * <b>DOM L1</b>     * Removes the appropriate attribute node; the name is the     * nodeName property of the attribute.     *     * <p>Note that since there is no portable way for DOM to record     * DTD information, default values for attributes will never be     * provided automatically.     */    public Attr removeAttributeNode (Attr node)    {	if (attributes == null)	    throw new DomEx (DomEx.NOT_FOUND_ERR, null, node, 0);	return (Attr) attributes.removeNamedItem (node.getNodeName ());    }    /**     * <b>DOM L2</b>     * Removes the appropriate attribute node; the name combines     * the namespace name and the local part.     *     * <p>Note that since there is no portable way for DOM to record     * DTD information, default values for attributes will never be     * provided automatically.     */    public void removeAttributeNS (String namespace, String localPart)    {	if (attributes == null)	    throw new DomEx (DomEx.NOT_FOUND_ERR, localPart, null, 0);	attributes.removeNamedItemNS (namespace, localPart);    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?