dtmnodeproxy.java

来自「JAVA 所有包」· Java 代码 · 共 2,314 行 · 第 1/5 页

JAVA
2,314
字号
   * <p>   * An attribute specifying, as part of the XML declaration, whether this   * document is standalone.   * @since DOM Level 3   *   * NEEDSDOC @param standalone   */  public void setStandalone(boolean standalone)  {    throw new DTMDOMException(DOMException.NOT_SUPPORTED_ERR);  }  /**   * <p>EXPERIMENTAL! Based on the <a   * href='http://www.w3.org/TR/2001/WD-DOM-Level-3-Core-20010605'>Document   * Object Model (DOM) Level 3 Core Working Draft of 5 June 2001.</a>.   * <p>   * An attribute specifying whether errors checking is enforced or not.   * When set to <code>false</code>, the implementation is free to not   * test every possible error case normally defined on DOM operations,   * and not raise any <code>DOMException</code>. In case of error, the   * behavior is undefined. This attribute is <code>true</code> by   * defaults.   * @since DOM Level 3   *   * NEEDSDOC ($objectName$) @return   */  public boolean getStrictErrorChecking()  {    throw new DTMDOMException(DOMException.NOT_SUPPORTED_ERR);  }  /**   * <p>EXPERIMENTAL! Based on the <a   * href='http://www.w3.org/TR/2001/WD-DOM-Level-3-Core-20010605'>Document   * Object Model (DOM) Level 3 Core Working Draft of 5 June 2001.</a>.   * <p>   * An attribute specifying whether errors checking is enforced or not.   * When set to <code>false</code>, the implementation is free to not   * test every possible error case normally defined on DOM operations,   * and not raise any <code>DOMException</code>. In case of error, the   * behavior is undefined. This attribute is <code>true</code> by   * defaults.   * @since DOM Level 3   *   * NEEDSDOC @param strictErrorChecking   */  public void setStrictErrorChecking(boolean strictErrorChecking)  {    throw new DTMDOMException(DOMException.NOT_SUPPORTED_ERR);  }  /**   * <p>EXPERIMENTAL! Based on the <a   * href='http://www.w3.org/TR/2001/WD-DOM-Level-3-Core-20010605'>Document   * Object Model (DOM) Level 3 Core Working Draft of 5 June 2001.</a>.   * <p>   * An attribute specifying, as part of the XML declaration, the version   * number of this document. This is <code>null</code> when unspecified.   * @since DOM Level 3   *   * NEEDSDOC ($objectName$) @return   */  public String getVersion()  {    throw new DTMDOMException(DOMException.NOT_SUPPORTED_ERR);  }  /**   * <p>EXPERIMENTAL! Based on the <a   * href='http://www.w3.org/TR/2001/WD-DOM-Level-3-Core-20010605'>Document   * Object Model (DOM) Level 3 Core Working Draft of 5 June 2001.</a>.   * <p>   * An attribute specifying, as part of the XML declaration, the version   * number of this document. This is <code>null</code> when unspecified.   * @since DOM Level 3   *   * NEEDSDOC @param version   */  public void setVersion(String version)  {    throw new DTMDOMException(DOMException.NOT_SUPPORTED_ERR);  }                  /** Inner class to support getDOMImplementation.   */  static class DTMNodeProxyImplementation implements DOMImplementation  {    public DocumentType createDocumentType(String qualifiedName,String publicId, String systemId)    {      throw new DTMDOMException(DOMException.NOT_SUPPORTED_ERR);    }    public Document createDocument(String namespaceURI,String qualfiedName,DocumentType doctype)                            {      // Could create a DTM... but why, when it'd have to be permanantly empty?      throw new DTMDOMException(DOMException.NOT_SUPPORTED_ERR);            }    /** Ask whether we support a given DOM feature.     *      * In fact, we do not _fully_ support any DOM feature -- we're a     * read-only subset -- so arguably we should always return false.     * On the other hand, it may be more practically useful to return     * true and simply treat the whole DOM as read-only, failing on the     * methods we can't support. I'm not sure which would be more useful     * to the caller.     */    public boolean hasFeature(String feature,String version)    {      if( ("CORE".equals(feature.toUpperCase()) || "XML".equals(feature.toUpperCase())) 					&&           ("1.0".equals(version) || "2.0".equals(version)))        return true;      return false;    }    /**     *  This method returns a specialized object which implements the     * specialized APIs of the specified feature and version. The     * specialized object may also be obtained by using binding-specific     * casting methods but is not necessarily expected to, as discussed in Mixed DOM implementations.     * @param feature The name of the feature requested (case-insensitive).     * @param version  This is the version number of the feature to test. If     *   the version is <code>null</code> or the empty string, supporting     *   any version of the feature will cause the method to return an     *   object that supports at least one version of the feature.     * @return  Returns an object which implements the specialized APIs of     *   the specified feature and version, if any, or <code>null</code> if     *   there is no object which implements interfaces associated with that     *   feature. If the <code>DOMObject</code> returned by this method     *   implements the <code>Node</code> interface, it must delegate to the     *   primary core <code>Node</code> and not return results inconsistent     *   with the primary core <code>Node</code> such as attributes,     *   childNodes, etc.     * @since DOM Level 3     */    public Object getFeature(String feature, String version) {        // we don't have any alternate node, either this node does the job        // or we don't have anything that does        //return hasFeature(feature, version) ? this : null;        return null; //PENDING    }  }//RAMESH : Pending proper implementation of DOM Level 3        public Object setUserData(String key,                              Object data,                              UserDataHandler handler) {        return getOwnerDocument().setUserData( key, data, handler);    }    /**     * Retrieves the object associated to a key on a this node. The object     * must first have been set to this node by calling     * <code>setUserData</code> with the same key.     * @param key The key the object is associated to.     * @return Returns the <code>DOMObject</code> associated to the given key     *   on this node, or <code>null</code> if there was none.     * @since DOM Level 3     */    public Object getUserData(String key) {        return getOwnerDocument().getUserData( key);    }       /**     *  This method returns a specialized object which implements the     * specialized APIs of the specified feature and version. The     * specialized object may also be obtained by using binding-specific     * casting methods but is not necessarily expected to, as discussed in Mixed DOM implementations.     * @param feature The name of the feature requested (case-insensitive).     * @param version  This is the version number of the feature to test. If     *   the version is <code>null</code> or the empty string, supporting     *   any version of the feature will cause the method to return an     *   object that supports at least one version of the feature.     * @return  Returns an object which implements the specialized APIs of     *   the specified feature and version, if any, or <code>null</code> if     *   there is no object which implements interfaces associated with that     *   feature. If the <code>DOMObject</code> returned by this method     *   implements the <code>Node</code> interface, it must delegate to the     *   primary core <code>Node</code> and not return results inconsistent     *   with the primary core <code>Node</code> such as attributes,     *   childNodes, etc.     * @since DOM Level 3     */    public Object getFeature(String feature, String version) {        // we don't have any alternate node, either this node does the job        // or we don't have anything that does        return isSupported(feature, version) ? this : null;    }    /**     * Tests whether two nodes are equal.     * <br>This method tests for equality of nodes, not sameness (i.e.,     * whether the two nodes are references to the same object) which can be     * tested with <code>Node.isSameNode</code>. All nodes that are the same     * will also be equal, though the reverse may not be true.     * <br>Two nodes are equal if and only if the following conditions are     * satisfied: The two nodes are of the same type.The following string     * attributes are equal: <code>nodeName</code>, <code>localName</code>,     * <code>namespaceURI</code>, <code>prefix</code>, <code>nodeValue</code>     * , <code>baseURI</code>. This is: they are both <code>null</code>, or     * they have the same length and are character for character identical.     * The <code>attributes</code> <code>NamedNodeMaps</code> are equal.     * This is: they are both <code>null</code>, or they have the same     * length and for each node that exists in one map there is a node that     * exists in the other map and is equal, although not necessarily at the     * same index.The <code>childNodes</code> <code>NodeLists</code> are     * equal. This is: they are both <code>null</code>, or they have the     * same length and contain equal nodes at the same index. This is true     * for <code>Attr</code> nodes as for any other type of node. Note that     * normalization can affect equality; to avoid this, nodes should be     * normalized before being compared.     * <br>For two <code>DocumentType</code> nodes to be equal, the following     * conditions must also be satisfied: The following string attributes     * are equal: <code>publicId</code>, <code>systemId</code>,     * <code>internalSubset</code>.The <code>entities</code>     * <code>NamedNodeMaps</code> are equal.The <code>notations</code>     * <code>NamedNodeMaps</code> are equal.     * <br>On the other hand, the following do not affect equality: the     * <code>ownerDocument</code> attribute, the <code>specified</code>     * attribute for <code>Attr</code> nodes, the     * <code>isWhitespaceInElementContent</code> attribute for     * <code>Text</code> nodes, as well as any user data or event listeners     * registered on the nodes.     * @param arg The node to compare equality with.     * @param deep If <code>true</code>, recursively compare the subtrees; if     *   <code>false</code>, compare only the nodes themselves (and its     *   attributes, if it is an <code>Element</code>).     * @return If the nodes, and possibly subtrees are equal,     *   <code>true</code> otherwise <code>false</code>.     * @since DOM Level 3     */    public boolean isEqualNode(Node arg) {        if (arg == this) {            return true;        }        if (arg.getNodeType() != getNodeType()) {            return false;        }        // in theory nodeName can't be null but better be careful        // who knows what other implementations may be doing?...        if (getNodeName() == null) {            if (arg.getNodeName() != null) {                return false;            }        }        else if (!getNodeName().equals(arg.getNodeName())) {            return false;        }        if (getLocalName() == null) {            if (arg.getLocalName() != null) {                return false;            }        }        else if (!getLocalName().equals(arg.getLocalName())) {            return false;        }        if (getNamespaceURI() == null) {            if (arg.getNamespaceURI() != null) {                return false;            }        }        else if (!getNamespaceURI().equals(arg.getNamespaceURI())) {            return false;        }        if (getPrefix() == null) {            if (arg.getPrefix() != null) {                return false;            }        }        else if (!getPrefix().equals(arg.getPrefix())) {            return false;        }        if (getNodeValue() == null) {            if (arg.getNodeValue() != null) {                return false;            }        }        else if (!getNodeValue().equals(arg.getNodeValue())) {            return false;        }    /*        if (getBaseURI() == null) {            if (((NodeImpl) arg).getBaseURI() != null) {                return false;            }        }        else if (!getBaseURI().equals(((NodeImpl) arg).getBaseURI())) {            return false;        }*/             return true;    }      /**     * DOM Level 3     * Look up the namespace URI associated to the given prefix, starting from this node.     * Use lookupNamespaceURI(null) to lookup the default namespace     *     * @param namespaceURI     * @return th URI for the namespace     * @since DOM Level 3     */    public String lookupNamespaceURI(String specifiedPrefix) {        short type = this.getNodeType();        switch (type) {        case Node.ELEMENT_NODE : {                String namespace = this.getNamespaceURI();                String prefix = this.getPrefix();                if (namespace !=null) {                    // REVISIT: is it possible that prefix is empty string?                    if (specifiedPrefix== null && prefix==specifiedPrefix) {                        // looking for default namespace                        return namespace;                    } else if (prefix != null && prefix.equals(specifiedPrefix)) {                        // non default namespace                        return namespace;                    }                }                if (this.hasAttributes()) {                    NamedNodeMap map = this.getAttributes();                    int length = map.getLength();                    for (int i=0;i<length;i++) {                        Node attr = map.item(i);                        String attrPrefix = attr.getPrefix();                        String value = attr.getNodeValue();                        namespace = attr.getNamespaceURI();                        if (namespace !=null && namespace.equals("http://www.w3.org/2000/xmlns/")) {                            // at this point we are dealing with DOM Level 2 nodes only                            if (specifiedPrefix == null &&                                attr.getNodeName().equals("xmlns")) {                                // default namespace                                return value;                            } else if (attrPrefix !=null &&                                       attrPrefix.equals("xmlns") &&                                       attr.getLocalName().equals(specifiedPrefix)) {                 // non default namespace                                return value;                            }                        }                    }                }		/*                NodeImpl ancestor = (NodeImpl)getElementAncestor(this);                if (ancestor != null) {                    return ancestor.lookupNamespaceURI(specifiedPrefix);                }		*/                return null;            }/*        case Node.DOCUMENT_NODE : {                return((NodeImpl)((Document)this).getDocumentElement()).lookupNamespaceURI(specifiedPrefix) ;            }*/        case Node.ENTITY_NODE :        case Node.NOTATION_NODE:        case Node.DOCUMENT_FRAGMENT_NODE:        case Node.DOCUMENT_TYPE_NODE:            // type is unknown            return null;        case Node.ATTRIBUTE_NODE:{                if (this.getOwnerElement().getNodeType() == Node.ELEMENT_NODE) {                    return getOwnerElement().lookupNamespaceURI(specifiedPrefix);                }                return null;            }        default:{	   /*                NodeImpl ancestor = (NodeImpl)getElementAncestor(this);                if (ancestor != null) {                    return ancestor.lookupNamespaceURI(specifiedPrefix);                }             */                return null;            }        }    }        /**     *  DOM Level 3      *  This method checks if the specified <code>namespaceURI</code> is the     *  default namespace or not.     *  @param namespaceURI The namespace URI to look for.     *  @return  <code>true</code> if the specified <code>namespaceURI</code>     *   is the default namespace, <code>false</code> otherwise.     * @since DOM Level 3     */    public boolean isDefaultNamespace(String namespaceURI){       /*        // REVISIT: remove casts when DOM L3 becomes REC.        short type = this.getNodeType();        switch (type) {        case Node.ELEMENT_NODE: {            String namespace = this.getNamespaceURI();            String prefix = this.getPrefix();            // REVISIT: is it possible that prefix is empty string?            if (prefix == null || prefix.length() == 0) {                if (namespaceURI == null) {                    return (namespace == namespaceURI);                }                return namespaceURI.equals(namespace);            }            if (this.hasAttributes()) {                ElementImpl elem = (ElementImpl)this;                NodeImpl attr = (NodeImpl)elem.getAttributeNodeNS("http://www.w3.org/2000/xmlns/", "xmlns");                if (attr != null) {                    String value = attr.getNodeValue();                    if (namespaceURI == null) {                        return (namespace == value);                    }                    return namespaceURI.equals(value);                }            }            NodeImpl ancestor = (NodeImpl)getElementAncestor(this);            if (ancestor != null) {                return ancestor.isDefaultNamespace(namespaceURI);            }            return false;        }        case Node.DOCUMENT_NODE:{                return((NodeImpl)((Document)this).getDocumentElement()).isDefaultNamespace(namespaceURI);            }        case Node.ENTITY_NODE :          case Node.NOTATION_NODE:        case Node.DOCUMENT_FRAGMENT_NODE:        case Node.DOCUMENT_TYPE_NODE:            // type is unknown            return false;        case Node.ATTRIBUTE_NODE:{                if (this.ownerNode.getNodeType() == Node.ELEMENT_NODE) {                    return ownerNode.isDefaultNamespace(namespaceURI);                }                return false;            }        default:{                  NodeImpl ancestor = (NodeImpl)getElementAncestor(this);                if (ancestor != null) {                    return ancestor.isDefaultNamespace(namespaceURI);                }                return false;

⌨️ 快捷键说明

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