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

📄 documentnavigator.java

📁 XML的解析、编译、查询等技术的JAVA源代码。
💻 JAVA
字号:
/* * $Header: /home/projects/jaxen/scm/jaxen/src/java/main/org/jaxen/xom/DocumentNavigator.java,v 1.8 2006/06/03 20:02:50 elharo Exp $ * $Revision: 1.8 $ * $Date: 2006/06/03 20:02:50 $ * * ==================================================================== * * Copyright 2000-2003 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.8 2006/06/03 20:02:50 elharo Exp $ */package org.jaxen.xom;import nu.xom.Attribute;import nu.xom.Comment;import nu.xom.Document;import nu.xom.Element;import nu.xom.ProcessingInstruction;import nu.xom.Text;import nu.xom.Node;import nu.xom.Builder;import nu.xom.NodeFactory;import nu.xom.ParentNode;import org.jaxen.XPath;import org.jaxen.UnsupportedAxisException;import org.jaxen.FunctionCallException;import org.jaxen.BaseXPath;import org.jaxen.JaxenConstants;import org.jaxen.util.SingleObjectIterator;import org.jaxen.saxpath.SAXPathException;import java.util.Iterator;import java.util.HashMap;import java.util.Map;/** * Interface for navigating around the XOM object model. * * <p> * This class is not intended for direct usage, but is * used by the Jaxen engine during evaluation. * </p> * * @see XPath * */public class DocumentNavigator extends org.jaxen.DefaultNavigator{    /**     *      */    private static final long serialVersionUID = 3159311338575942877L;    public boolean isAttribute(Object o) {        return o instanceof Attribute;    }    public boolean isComment(Object o) {        return o instanceof Comment;    }    public boolean isDocument(Object o) {        return o instanceof Document;    }    public boolean isElement(Object o) {        return o instanceof Element;    }    public boolean isNamespace(Object o) {        return o instanceof XPathNamespace;    }    public boolean isProcessingInstruction(Object o) {        return o instanceof ProcessingInstruction;    }    public boolean isText(Object o) {        return o instanceof Text;    }    //        public String getAttributeName(Object o) {        return (isAttribute(o) ? ((Attribute)o).getLocalName() : null);    }    public String getAttributeNamespaceUri(Object o) {        return (isAttribute(o) ? ((Attribute)o).getNamespaceURI() : null);    }    public String getAttributeQName(Object o) {        return (isAttribute(o) ? ((Attribute)o).getQualifiedName() : null);    }    public String getAttributeStringValue(Object o) {        return (isAttribute(o) ? ((Attribute)o).getValue() : null);    }    //        public String getCommentStringValue(Object o) {        return (isComment(o) ? ((Comment)o).getValue() : null);    }    public String getElementName(Object o) {        return (isElement(o) ? ((Element)o).getLocalName() : null);    }    public String getElementNamespaceUri(Object o) {        return (isElement(o) ? ((Element)o).getNamespaceURI() : null);    }    public String getElementQName(Object o) {        return (isElement(o) ? ((Element)o).getQualifiedName() : null);    }    public String getElementStringValue(Object o) {        return (o instanceof Node ? ((Node)o).getValue() : null);    }    //        public String getNamespacePrefix(Object o) {        if (isElement(o)) {            return ((Element)o).getNamespacePrefix();        } else if (isAttribute(o)) {            return ((Attribute)o).getNamespacePrefix();        } else if (o instanceof XPathNamespace) {            return ((XPathNamespace)o).getNamespacePrefix();        }        return null;    }    public String getNamespaceStringValue(Object o) {        if (isElement(o)) {            return ((Element)o).getNamespaceURI();        } else if (isAttribute(o)) {            return ((Attribute)o).getNamespaceURI();        } else if (o instanceof XPathNamespace) {            return ((XPathNamespace)o).getNamespaceURI();        }        return null;    }    //        public String getTextStringValue(Object o) {        return (o instanceof Text ? ((Text)o).getValue() : null);    }        //    public Object getDocument(String s) throws FunctionCallException {        try {            return new Builder(new NodeFactory()).build(s);        } catch (Exception pe) {            throw new FunctionCallException(pe);        }    }    public Object getDocumentNode(Object o) {        ParentNode parent = null;        if (o instanceof ParentNode) {            parent = (ParentNode)o;        } else if (o instanceof Node) {            parent = ((Node)o).getParent();        }        return parent.getDocument();    }    //        private abstract static class IndexIterator implements Iterator {        private Object o = null;        private int pos = 0, end = -1;        public IndexIterator(Object o, int pos, int end) {            this.o = o;            this.pos = pos;            this.end = end;        }        public boolean hasNext() {            return pos < end;        }        public abstract Object get(Object o, int i);                 public Object next() {            return get(o, pos++);        }        public void remove() {            throw new UnsupportedOperationException();        }    }        //        public Iterator getAttributeAxisIterator(Object o) {        if (isElement(o)) {            return new IndexIterator(o, 0, ((Element)o).getAttributeCount()) {                public Object get(Object o, int i) {                    return ((Element)o).getAttribute(i);                }            };        }        return JaxenConstants.EMPTY_ITERATOR;    }    public Iterator getChildAxisIterator(Object o) {        if (isElement(o) || (o instanceof Document)) {            return new IndexIterator(o, 0, ((ParentNode)o).getChildCount()) {                public Object get(Object o, int i) {                    return ((ParentNode)o).getChild(i);                }            };        }        return JaxenConstants.EMPTY_ITERATOR;    }    //    public Iterator getParentAxisIterator(Object o) {        Object parent = null;        if (o instanceof Node) {            parent = ((Node)o).getParent();        } else if (isNamespace(o)) {            parent = ((XPathNamespace)o).getElement();        }        return (parent != null ? new SingleObjectIterator(parent) : null);    }    public Object getParentNode(Object o)  {        return (o instanceof Node ? ((Node)o).getParent() : null);    }    //    public Iterator getPrecedingAxisIterator(Object o) throws UnsupportedAxisException {        return super.getPrecedingAxisIterator(o);    }    public Iterator getPrecedingSiblingAxisIterator(Object o) throws UnsupportedAxisException {        return super.getPrecedingSiblingAxisIterator(o);    }        //    public String getProcessingInstructionData(Object o) {        return (o instanceof ProcessingInstruction ? ((ProcessingInstruction)o).getValue() : null);    }    public String getProcessingInstructionTarget(Object o) {        return (o instanceof ProcessingInstruction ? ((ProcessingInstruction)o).getTarget() : null);    }    //    public String translateNamespacePrefixToUri(String s, Object o) {        Element element = null;        if (o instanceof Element) {            element = (Element) o;        } else if (o instanceof ParentNode) {        }        else if (o instanceof Node) {            element = (Element)((Node)o).getParent();        }        else if (o instanceof XPathNamespace)        {            element = ((XPathNamespace)o).getElement();        }        if (element != null) {            return element.getNamespaceURI(s);        }        return null;    }    //        public XPath parseXPath(String s) throws SAXPathException {        return new BaseXPath(s, this);    }    //        /** Wrapper for XOM namespace nodes to give them a parent,     * as required by the XPath data model.     *     *  @author Erwin Bolwidt     */    private static class XPathNamespace    {        private Element element;        private String uri, prefix;        public XPathNamespace(Element elt, String uri, String prefix)        {            element = elt;            this.uri = uri;            this.prefix = prefix;        }        /** Returns the XOM element from which this namespace node has been          *  retrieved. The result may be null when the namespace node has not yet         *  been assigned to an element.         */        public Element getElement()        {            return element;        }        public String getNamespaceURI()        {            return uri;        }        public String getNamespacePrefix()        {            return prefix;        }        public String toString()        {            return ( "[xmlns:" + prefix + "=\"" +                    uri + "\", element=" +                    element.getLocalName() + "]" );        }    }    //        private boolean addNamespaceForElement(Element elt, String uri, String prefix, Map map)    {        if (uri != null && uri.length() > 0 && (! map.containsKey(prefix))) {            map.put(prefix, new XPathNamespace(elt, uri, prefix));            return true;        }        return false;    }        public Iterator getNamespaceAxisIterator(Object o)    {        if (! isElement(o)) {            return JaxenConstants.EMPTY_ITERATOR;        }        Map nsMap = new HashMap();        Element elt = (Element)o;        ParentNode parent = elt;                while (parent instanceof Element) {            elt = (Element)parent;            String uri    = elt.getNamespaceURI();            String prefix = elt.getNamespacePrefix();            addNamespaceForElement(elt, uri, prefix, nsMap);            int count = elt.getNamespaceDeclarationCount();            for (int i = 0; i < count; i++) {                prefix = elt.getNamespacePrefix(i);                uri    = elt.getNamespaceURI(prefix);                addNamespaceForElement(elt, uri, prefix, nsMap);            }            parent = elt.getParent();        }        addNamespaceForElement(elt, "http://www.w3.org/XML/1998/namespace", "xml", nsMap);        return nsMap.values().iterator();    }}

⌨️ 快捷键说明

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