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 + -
显示快捷键?