abstractdomparser.java

来自「JAVA的一些源码 JAVA2 STANDARD EDITION DEVELO」· Java 代码 · 共 1,652 行 · 第 1/5 页

JAVA
1,652
字号
                            // replace children                            Node parent = fCurrentNode.getParentNode ();                            NodeList ls = fCurrentNode.getChildNodes ();                            int length = ls.getLength ();                            for (int i=0;i<length;i++) {                                parent.appendChild(ls.item(0));                            }                                                           parent.removeChild(fCurrentNode);                            fCurrentNode = parent;                            return;                        }                        default: { }                    }                }                fCurrentNode = fCurrentNode.getParentNode ();            } // end-if DOMFilter            else {                setCharacterData(false);                fCurrentNode = fCurrentNode.getParentNode();            }        }        else {            fCurrentNodeIndex =                fDeferredDocumentImpl.getParentNode(fCurrentNodeIndex, false);        }    } // endElement(QName)    /**     * The start of a CDATA section.     * @param augs     Additional information that may include infoset augmentations     *     * @throws XNIException Thrown by handler to signal an error.     */    public void startCDATA (Augmentations augs) throws XNIException {        fInCDATASection = true;        if (!fDeferNodeExpansion) {            if (fFilterReject) {                return;            }            if (fCreateCDATANodes) {                setCharacterData (false);            }        }    } // startCDATA()    /**     * The end of a CDATA section.     * @param augs     Additional information that may include infoset augmentations     *     * @throws XNIException Thrown by handler to signal an error.     */    public void endCDATA (Augmentations augs) throws XNIException {        fInCDATASection = false;        if (!fDeferNodeExpansion) {            if (fFilterReject) {                return;            }            if (fCurrentCDATASection !=null) {                if (fDOMFilter !=null && !fInEntityRef &&                (fDOMFilter.getWhatToShow () & NodeFilter.SHOW_CDATA_SECTION)!= 0) {                    short code = fDOMFilter.acceptNode (fCurrentCDATASection);                    switch (code) {                        case LSParserFilter.FILTER_INTERRUPT:{                            throw abort;                        }                        case LSParserFilter.FILTER_REJECT:{                            // fall through to SKIP since CDATA section has no children.                        }                        case LSParserFilter.FILTER_SKIP: {                            Node parent = fCurrentNode.getParentNode();                                                parent.removeChild(fCurrentCDATASection);                            fCurrentNode = parent;                            return;                        }                        default: {                            // accept node                         }                    }                }                fCurrentNode = fCurrentNode.getParentNode ();                fCurrentCDATASection = null;            }        }        else {            if (fCurrentCDATASectionIndex !=-1) {                            fCurrentNodeIndex =                fDeferredDocumentImpl.getParentNode(fCurrentNodeIndex, false);                fCurrentCDATASectionIndex = -1;            }        }    } // endCDATA()    /**     * The end of the document.     * @param augs     Additional information that may include infoset augmentations     *     * @throws XNIException Thrown by handler to signal an error.     */    public void endDocument (Augmentations augs) throws XNIException {        if (!fDeferNodeExpansion) {            // REVISIT: when DOM Level 3 is REC rely on Document.support            //          instead of specific class            // set DOM error checking back on            if (fDocumentImpl != null) {                fDocumentImpl.setStrictErrorChecking(true);            }            fCurrentNode = null;        }        else {            fCurrentNodeIndex = -1;        }    } // endDocument()    /**     * This method notifies the end of a general entity.     * <p>     * <strong>Note:</strong> This method is not called for entity references     * appearing as part of attribute values.     *      * @param name   The name of the entity.                             * @param augs   Additional information that may include infoset augmentations     *                    * @exception XNIException     *                   Thrown by handler to signal an error.     */    public void endGeneralEntity(String name, Augmentations augs) throws XNIException {        if (DEBUG_EVENTS) {            System.out.println("==>endGeneralEntity: ("+name+")");        }        if (!fDeferNodeExpansion) {            if (fFilterReject) {                return;            }            setCharacterData (true);            if (fDocumentType != null) {                // get current entity declaration                NamedNodeMap entities = fDocumentType.getEntities();                fCurrentEntityDecl = (EntityImpl) entities.getNamedItem(name);                if (fCurrentEntityDecl != null) {                                if (fCurrentEntityDecl != null && fCurrentEntityDecl.getFirstChild() == null) {                        fCurrentEntityDecl.setReadOnly(false, true);                        Node child = fCurrentNode.getFirstChild();                        while (child != null) {                            Node copy = child.cloneNode (true);                            fCurrentEntityDecl.appendChild (copy);                            child = child.getNextSibling ();                        }                        fCurrentEntityDecl.setReadOnly (true, true);                        //entities.setNamedItem(fCurrentEntityDecl);                    }                    fCurrentEntityDecl = null;                }            }            fInEntityRef = false;            boolean removeEntityRef = false;            if (fCreateEntityRefNodes) {                if (fDocumentImpl != null) {                                    // Make entity ref node read only                    ((NodeImpl)fCurrentNode).setReadOnly(true, true);                }                if (fDOMFilter !=null &&                (fDOMFilter.getWhatToShow () & NodeFilter.SHOW_ENTITY_REFERENCE)!= 0) {                    short code = fDOMFilter.acceptNode (fCurrentNode);                    switch (code) {                        case LSParserFilter.FILTER_INTERRUPT:{                            throw abort;                        }                        case LSParserFilter.FILTER_REJECT:{                            Node parent = fCurrentNode.getParentNode();                            parent.removeChild(fCurrentNode);                            fCurrentNode = parent;                            return;                        }                        case LSParserFilter.FILTER_SKIP: {                            // make sure we don't loose chars if next event is characters()                            fFirstChunk = true;                            removeEntityRef = true;                            break;                        }                        default: {                            fCurrentNode = fCurrentNode.getParentNode ();                        }                    }                } else {                    fCurrentNode = fCurrentNode.getParentNode();                }            }            if (!fCreateEntityRefNodes || removeEntityRef) {                // move entity reference children to the list of                 // siblings of its parent and remove entity reference                NodeList children = fCurrentNode.getChildNodes();                Node parent = fCurrentNode.getParentNode();                int length = children.getLength();                if (length > 0) {                    // get previous sibling of the entity reference                    Node node = fCurrentNode.getPreviousSibling();                    // normalize text nodes                    Node child = children.item (0);                    if (node != null && node.getNodeType () == Node.TEXT_NODE &&                    child.getNodeType () == Node.TEXT_NODE) {                        ((Text)node).appendData (child.getNodeValue ());                        fCurrentNode.removeChild (child);                    } else {                        node = parent.insertBefore(child, fCurrentNode);                        handleBaseURI(node);                    }                    for (int i=1;i <length;i++) {                        node = parent.insertBefore(children.item(0), fCurrentNode);                        handleBaseURI(node);                    }                } // length > 0                parent.removeChild(fCurrentNode);                fCurrentNode = parent;            }        }        else {            if (fDocumentTypeIndex != -1) {                // find corresponding Entity decl                int node = fDeferredDocumentImpl.getLastChild(fDocumentTypeIndex, false);                while (node != -1) {                    short nodeType = fDeferredDocumentImpl.getNodeType(node, false);                    if (nodeType == Node.ENTITY_NODE) {                        String nodeName =                            fDeferredDocumentImpl.getNodeName(node, false);                        if (nodeName.equals(name)) {                            fDeferredEntityDecl = node;                            break;                        }                    }                    node = fDeferredDocumentImpl.getRealPrevSibling(node, false);                }            }            if (fDeferredEntityDecl != -1 &&            fDeferredDocumentImpl.getLastChild (fDeferredEntityDecl, false) == -1) {                // entity definition exists and it does not have any children                int prevIndex = -1;                int childIndex = fDeferredDocumentImpl.getLastChild (fCurrentNodeIndex, false);                while (childIndex != -1) {                    int cloneIndex = fDeferredDocumentImpl.cloneNode (childIndex, true);                    fDeferredDocumentImpl.insertBefore (fDeferredEntityDecl, cloneIndex, prevIndex);                    prevIndex = cloneIndex;                    childIndex = fDeferredDocumentImpl.getRealPrevSibling (childIndex, false);                }             }             if (fCreateEntityRefNodes) {                            fCurrentNodeIndex =                fDeferredDocumentImpl.getParentNode (fCurrentNodeIndex,                false);            } else { //!fCreateEntityRefNodes                // move children of entity ref before the entity ref.                // remove entity ref.                // holds a child of entity ref                int childIndex = fDeferredDocumentImpl.getLastChild (fCurrentNodeIndex, false);                int parentIndex =                fDeferredDocumentImpl.getParentNode (fCurrentNodeIndex,                false);                int prevIndex = fCurrentNodeIndex;                int lastChild = childIndex;                int sibling = -1;                while (childIndex != -1) {                    handleBaseURI (childIndex);                    sibling = fDeferredDocumentImpl.getRealPrevSibling (childIndex, false);                    fDeferredDocumentImpl.insertBefore (parentIndex, childIndex, prevIndex);                    prevIndex = childIndex;                    childIndex = sibling;                }                if(lastChild != -1)                    fDeferredDocumentImpl.setAsLastChild (parentIndex, lastChild);                else{                    sibling = fDeferredDocumentImpl.getRealPrevSibling (prevIndex, false);                    fDeferredDocumentImpl.setAsLastChild (parentIndex, sibling);                }                fCurrentNodeIndex = parentIndex;            }            fDeferredEntityDecl = -1;        }    } // endGeneralEntity(String, Augmentations)	/**     * Record baseURI information for the Element (by adding xml:base attribute)     * or for the ProcessingInstruction (by setting a baseURI field)     * Non deferred DOM.     *      * @param node     */    protected final void handleBaseURI (Node node){        if (fDocumentImpl != null) {            // REVISIT: remove dependency on our implementation when            //          DOM L3 becomes REC            String baseURI = null;            short nodeType = node.getNodeType ();            if (nodeType == Node.ELEMENT_NODE) {                // if an element already has xml:base attribute                // do nothing                if (fNamespaceAware) {                    if (((Element)node).getAttributeNodeNS("http://www.w3.org/XML/1998/namespace","base")!=null) {                         ret

⌨️ 快捷键说明

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