⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlelement.java

📁 jxme的一些相关程序,主要是手机上程序开发以及手机和计算机通信的一些程序资料,程序编译需要Ant支持
💻 JAVA
字号:
/*
 * $Id: XMLElement.java,v 1.11 2001/11/05 21:48:08 bondolo Exp $
 ********************
 *
 * Copyright (c) 2001 Sun Microsystems, Inc.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. The end-user documentation included with the redistribution,
 *    if any, must include the following acknowledgment:
 *       "This product includes software developed by the
 *       Sun Microsystems, Inc. for Project JXTA."
 *    Alternately, this acknowledgment may appear in the software itself,
 *    if and wherever such third-party acknowledgments normally appear.
 *
 * 4. The names "Sun", "Sun Microsystems, Inc.", "JXTA" and "Project JXTA" must
 *    not be used to endorse or promote products derived from this
 *    software without prior written permission. For written
 *    permission, please contact Project JXTA at http://www.jxta.org.
 *
 * 5. Products derived from this software may not be called "JXTA",
 *    nor may "JXTA" appear in their name, without prior written
 *    permission of Sun.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED.  IN NO EVENT SHALL SUN MICROSYSTEMS OR
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 * ====================================================================
 *
 * This software consists of voluntary contributions made by many
 * individuals on behalf of Project JXTA.  For more
 * information on Project JXTA, please see
 * <http://www.jxta.org/>.
 *
 * This license is based on the BSD license adopted by the Apache Foundation.
 ********************
 */

package net.jxta.impl.document;

import java.util.Enumeration;
import java.util.Vector;

import org.w3c.dom.*;
import org.w3c.dom.traversal.*;

import net.jxta.document.Attribute;
import net.jxta.document.Attributable;
import net.jxta.document.StructuredDocument;
import net.jxta.document.TextElement;

/**
 * This class represent an element of an XML document. XML Documents are formed
 * as a hierarchy of elements. Each element provides a proxy for DOM elements
 * and the text nodes containing values.
 *
 * @version     $Revision: 1.11 $
 * @since       JXTA 1.0
 */
public class XMLElement extends TextElementCommon implements Attributable  {
    
    protected XMLDocument root;
    
    /**
     * The DOM node for which this element is a proxy.
     */
    protected org.w3c.dom.Node domNode;
    
    /**
     * Constructor for associating a DOM node with a StructuredDocument Element.
     *
     * @param root the DOM not which is to be associated with this element.
     */
    protected XMLElement( XMLDocument root, org.w3c.dom.Node node ) {
        this.root = root;
        domNode = node;
    }
    
    /**
     * Get the name associated with an element.
     *
     * @return A string containing the name of this element.
     */
    public String getName() {
        return getAssocNode().getNodeName();
    }
    
    /**
     * Get the value (if any) associated with an element.
     *
     * @return A string containing the value of this element, if any, otherwise null.
     */
    public String getTextValue() {
        String itsValue = "";
        for( Node eachChild = getAssocNode().getFirstChild(); eachChild != null; eachChild = eachChild.getNextSibling() ) {
            if( Node.TEXT_NODE == eachChild.getNodeType() )
                itsValue += eachChild.getNodeValue();
        }
        
        if ( "".equals( itsValue ) )
            return null;
        else
            return itsValue;
    };
    
    /**
     *  Get the root element of the hierarchy this element belongs to.
     *
     *  @return StructuredDocument root of this element's hierarchy.
     *
     *  @since JXTA 1.0 
     */
    public StructuredDocument getRoot() {
        return root;
    }

    /**
     *  Get the parent of this element. If the element has not been inserted into
     *  the Document then null is returned. If this element is the root of the
     *  Document then it returns itself.
     **/
    public net.jxta.document.Element getParent( ) {
        Node node = getAssocNode();
        
        if( node.getOwnerDocument().equals( node ) )
            return new XMLElement( root, node );
        else
            return new XMLElement( root, node.getParentNode() );
    }
    
    /**
     * Add a child element to this element
     *
     * @param element the element to be added as a child
     */
    public void appendChild(TextElement element) {
        if( !(element instanceof XMLElement) )
            throw new IllegalArgumentException( "element type not supported." );
        
        getAssocNode().appendChild( ((XMLElement) element).getAssocNode() );
    };
    
    /**
     * Returns an enumeration of the immediate children of this element
     *
     * @return An enumeration containing all of the children of this element.
     */
    public Enumeration getChildren() {
        Vector children = new Vector();
        
        for( Node eachChild = getAssocNode().getFirstChild(); eachChild != null; eachChild = eachChild.getNextSibling() ) {
            if( Node.ELEMENT_NODE == eachChild.getNodeType() )
                children.addElement( new XMLElement( root, eachChild ) );
        }
        
        return children.elements();
    };
    
    /**
     * Returns an enumeration of the immediate children of this element whose
     * name match the specified string.
     *
     * @param name The name which will be matched against.
     * @return An enumeration containing all of the children of this element.
     */
    public Enumeration getChildren( String name ) {
        Vector children = new Vector();
        
        for( Node eachChild = getAssocNode().getFirstChild(); eachChild != null; eachChild = eachChild.getNextSibling() ) {
            if( (Node.ELEMENT_NODE == eachChild.getNodeType()) && (name.equals(eachChild.getNodeName()) ) )
                children.addElement( new XMLElement( root, eachChild ) );
        }
        
        return children.elements();
    };
    
    /**
     * Tests two elements for equality. For the XML document the definition of
     * equality is:
     *  
     *  - the item compared against must be an XML Element.
     *
     *  - The items must belong to the same document
     *
     *  - The items must have the same name.
     *
     *  - The items must have the save textual value.
     *
     * @param element the element to be compared against.
     * @return true if the elements are equal 
     *
     **/
    public boolean equals( Object element ) {
        if (this == element)
            return true;
        
        if( !(element instanceof XMLElement) )
            return false;
        
        XMLElement xmlElement = (XMLElement) element;
        
        Node me = getAssocNode();
        Node it = xmlElement.getAssocNode();
        
        if( me == it )
            return true;
        
        if( me.getOwnerDocument() != it.getOwnerDocument() )
            return false;
        
        if( !getName().equals( xmlElement.getName() ) )
            return false;
        
        String val1 = getTextValue( );
        String val2 = xmlElement.getTextValue( );
        
        if( (null == val1) && (null == val2) )
            return true;
        
        if( (null == val1) || (null == val2) )
            return false;
        
        return val1.equals( val2 );
    }
    
    /**
     *  Returns the DOM Node associated with this StructuredDocument element.
     *
     *  @return Node    The DOM Node associated with this StructuredDocument element.
     *
     **/
    protected Node getAssocNode() {
        return domNode;
    }

    // Attributable methods

    /**
     *  Adds an attribute with the given name and value. Some implementations
     *  may support only a single value for each distinct name. Others may
     *  support multiple values for each name. If the value being provided
     *  replaces some other value then that value is returned otherwise null
     *  is returned.
     *
     *  @param  name    name of the attribute.
     *  @param  value   value for the attribute.
     *  @return String  containing previous value for this name if the value
     *                  is being replaced otherwise null.
     **/
    public String addAttribute(String name, String value) {
        String oldAttrValue = ((org.w3c.dom.Element)getAssocNode()).getAttribute(name);
        
        ((org.w3c.dom.Element)getAssocNode()).setAttribute(name, value);
        return ( 0 == oldAttrValue.length() ) ? null : oldAttrValue;
    }
    
    /**
     *  Adds an attribute with the given name and value. Some implementations
     *  may support only a single value for each distinct name. Others may
     *  support multiple values for each name. If the value being provided
     *  replaces some other value then that value is returned otherwise null
     *  is returned.
     *
     *  @param  newAttrib    new attribute.
     *  @return String  containing previous value for this name if the value
     *                  is being replaced otherwise null.
     **/
    public String addAttribute(Attribute newAttrib) {
        String oldAttrValue = ((org.w3c.dom.Element)getAssocNode()).getAttribute(newAttrib.getName());
        ((org.w3c.dom.Element)getAssocNode()).setAttribute(newAttrib.getName(), newAttrib.getValue());
        return ( 0 == oldAttrValue.length() ) ? null : oldAttrValue;
    }
    
    /**
     *  Returns an enumerations of the attributes assosicated with this object.
     *  Each element is of type Attribute.
     *
     *  @return Enumeration the attributes associated with this object.
     *
     **/
    public Enumeration getAttributes() {
        NamedNodeMap nmap = domNode.getAttributes();
        if (nmap == null) {
            return null;
        }

        Vector attrs = new Vector();
        for (int i = 0; i < nmap.getLength(); i++) {
            Node domAttr = nmap.item(i);
            Attribute attr = new Attribute(this, 
                                           domAttr.getNodeName(),
                                           domAttr.getNodeValue());
            attrs.addElement(attr);
        }

        return attrs.elements();
    }
    
    /**
     *  returns a single attribute which matches the name provided. If no such
     *  named attribute exists then null is returned. For impelementations of
     *  this interface which support multiple values for each name only the
     *  first value will be returned. To access all values for a name you must
     *  use getAttributes.
     *
     *  @return Attribute the attributes matching the given name.
     *
     **/
    public Attribute getAttribute(String name) {
        NamedNodeMap nmap = domNode.getAttributes();
        if (nmap == null) {
            return null;
        }

        for (int i = 0; i < nmap.getLength(); i++) {
            Node domAttr = nmap.item(i);
            if (name.equals(domAttr.getNodeName())) {
                Attribute attr = new Attribute(this, 
                                               domAttr.getNodeName(),
                                               domAttr.getNodeValue());
                return attr;
            }
        }

        return null;
     }
}

⌨️ 快捷键说明

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