abstractdomparser.java

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

JAVA
1,657
字号
                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) {                        return;                    }                } else if (((Element)node).getAttributeNode ("xml:base") != null) {                    return;                }                // retrive the baseURI from the entity reference                baseURI = ((EntityReferenceImpl)fCurrentNode).getBaseURI ();                if (baseURI !=null && !baseURI.equals (fDocumentImpl.getDocumentURI ())) {                    if (fNamespaceAware) {                        ((Element)node).setAttributeNS ("http://www.w3.org/XML/1998/namespace","base", baseURI);                    } else {                        ((Element)node).setAttribute ("xml:base", baseURI);                    }                }            }            else if (nodeType == Node.PROCESSING_INSTR

⌨️ 快捷键说明

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