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

📄 documentnavigator.java

📁 XML的解析、编译、查询等技术的JAVA源代码。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package org.jaxen.jdom;/* * $Header: /home/projects/jaxen/scm/jaxen/src/java/main/org/jaxen/jdom/DocumentNavigator.java,v 1.36 2006/09/21 11:48:05 elharo Exp $ * $Revision: 1.36 $ * $Date: 2006/09/21 11:48:05 $ * * ==================================================================== * * Copyright 2000-2005 bob mcwhirter & James Strachan. * All rights reserved. * * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: *  *   * Redistributions of source code must retain the above copyright *     notice, this list of conditions and the following disclaimer. *  *   * 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. *  *   * Neither the name of the Jaxen Project nor the names of its *     contributors may be used to endorse or promote products derived  *     from this software without specific prior written permission. *  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS 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 THE COPYRIGHT OWNER * OR 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 the Jaxen Project and was originally * created by bob mcwhirter <bob@werken.com> and * James Strachan <jstrachan@apache.org>.  For more information on the * Jaxen Project, please see <http://www.jaxen.org/>. * * $Id: DocumentNavigator.java,v 1.36 2006/09/21 11:48:05 elharo Exp $*/import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import org.jaxen.DefaultNavigator;import org.jaxen.FunctionCallException;import org.jaxen.NamedAccessNavigator;import org.jaxen.Navigator;import org.jaxen.XPath;import org.jaxen.JaxenConstants;import org.jaxen.saxpath.SAXPathException;import org.jaxen.util.SingleObjectIterator;import org.jdom.Attribute;import org.jdom.CDATA;import org.jdom.Comment;import org.jdom.Document;import org.jdom.Element;import org.jdom.Namespace;import org.jdom.ProcessingInstruction;import org.jdom.Text;import org.jdom.input.SAXBuilder;/**  * Interface for navigating around the JDOM object model. * * <p> * This class is not intended for direct usage, but is * used by the Jaxen engine during evaluation. * </p> * * @see XPath * * @author <a href="mailto:bob@werken.com">bob mcwhirter</a> * @author Stephen Colebourne */public class DocumentNavigator extends DefaultNavigator implements NamedAccessNavigator{    /**     *      */    private static final long serialVersionUID = -1636727587303584165L;    /** Singleton implementation.     */    private static class Singleton    {        /** Singleton instance.         */        private static DocumentNavigator instance = new DocumentNavigator();    }    public static Navigator getInstance()    {        return Singleton.instance;    }    public boolean isElement(Object obj)    {        return obj instanceof Element;    }    public boolean isComment(Object obj)    {        return obj instanceof Comment;    }    public boolean isText(Object obj)    {        return ( obj instanceof Text                 ||                 obj instanceof CDATA );    }    public boolean isAttribute(Object obj)    {        return obj instanceof Attribute;    }    public boolean isProcessingInstruction(Object obj)    {        return obj instanceof ProcessingInstruction;    }    public boolean isDocument(Object obj)    {        return obj instanceof Document;    }    public boolean isNamespace(Object obj)    {        return obj instanceof Namespace || obj instanceof XPathNamespace;    }    public String getElementName(Object obj)    {        Element elem = (Element) obj;        return elem.getName();    }    public String getElementNamespaceUri(Object obj)    {        Element elem = (Element) obj;                String uri = elem.getNamespaceURI();        if ( uri != null && uri.length() == 0 )             return null;        else            return uri;    }    public String getAttributeName(Object obj)    {        Attribute attr = (Attribute) obj;        return attr.getName();    }    public String getAttributeNamespaceUri(Object obj)    {        Attribute attr = (Attribute) obj;        String uri = attr.getNamespaceURI();        if ( uri != null && uri.length() == 0 )             return null;        else            return uri;    }    public Iterator getChildAxisIterator(Object contextNode)    {        if ( contextNode instanceof Element )        {            return ((Element)contextNode).getContent().iterator();        }        else if ( contextNode instanceof Document )        {            return ((Document)contextNode).getContent().iterator();        }        return JaxenConstants.EMPTY_ITERATOR;    }    /**     * Retrieves an <code>Iterator</code> over the child elements that     * match the supplied local name and namespace URI.     *     * @param contextNode      the origin context node     * @param localName        the local name of the children to return, always present     * @param namespacePrefix  ignored; prefixes are not used when matching in XPath     * @param namespaceURI     the URI of the namespace of the children to return     * @return an Iterator     that traverses the named children, or null if none     */    public Iterator getChildAxisIterator(            Object contextNode, String localName, String namespacePrefix, String namespaceURI) {        if ( contextNode instanceof Element ) {            Element node = (Element) contextNode;            if (namespaceURI == null) {                return node.getChildren(localName).iterator();            }            return node.getChildren(localName, Namespace.getNamespace(namespacePrefix, namespaceURI)).iterator();        }        if ( contextNode instanceof Document ) {            Document node = (Document) contextNode;                        Element el = node.getRootElement();            if (el.getName().equals(localName) == false) {                return JaxenConstants.EMPTY_ITERATOR;            }            if (namespaceURI != null) {                // JDOM's equals method does not consider the prefix when comparing namespace objects                if (!Namespace.getNamespace(namespacePrefix, namespaceURI).equals(el.getNamespace())) {                    return JaxenConstants.EMPTY_ITERATOR;                }            }            else if(el.getNamespace() != Namespace.NO_NAMESPACE) {                 return JaxenConstants.EMPTY_ITERATOR;             }                        return new SingleObjectIterator(el);        }        return JaxenConstants.EMPTY_ITERATOR;    }        public Iterator getNamespaceAxisIterator(Object contextNode)    {        if ( ! ( contextNode instanceof Element ) )        {            return JaxenConstants.EMPTY_ITERATOR;        }        Element elem = (Element) contextNode;        Map nsMap = new HashMap();        Element current = elem;        while ( current != null ) {                    Namespace ns = current.getNamespace();                        if ( ns != Namespace.NO_NAMESPACE ) {                if ( !nsMap.containsKey(ns.getPrefix()) )                    nsMap.put( ns.getPrefix(), new XPathNamespace(elem, ns) );            }                    Iterator additional = current.getAdditionalNamespaces().iterator();            while ( additional.hasNext() ) {                ns = (Namespace)additional.next();                if ( !nsMap.containsKey(ns.getPrefix()) )                    nsMap.put( ns.getPrefix(), new XPathNamespace(elem, ns) );            }            Iterator attributes = current.getAttributes().iterator();            while ( attributes.hasNext() ) {                Attribute attribute = (Attribute)attributes.next();                Namespace attrNS = attribute.getNamespace();                            if ( attrNS != Namespace.NO_NAMESPACE ) {                    if ( !nsMap.containsKey(attrNS.getPrefix()) )                        nsMap.put( attrNS.getPrefix(), new XPathNamespace(elem, attrNS) );                }            }            if (current.getParent() instanceof Element) {                current = (Element)current.getParent();            } else {                current = null;            }        }        nsMap.put( "xml", new XPathNamespace(elem, Namespace.XML_NAMESPACE) );        return nsMap.values().iterator();

⌨️ 快捷键说明

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