domparserimpl.java
来自「JAVA 所有包」· Java 代码 · 共 1,309 行 · 第 1/4 页
JAVA
1,309 行
!fConfiguration.getFeature(NORMALIZE_DATA) && !fConfiguration.getFeature(CREATE_CDATA_NODES_FEATURE); return (infoset) ? Boolean.TRUE : Boolean.FALSE; } else if (name.equalsIgnoreCase(Constants.DOM_CDATA_SECTIONS)) { return (fConfiguration.getFeature(CREATE_CDATA_NODES_FEATURE)) ? Boolean.TRUE : Boolean.FALSE; } else if (name.equalsIgnoreCase(Constants.DOM_CHECK_CHAR_NORMALIZATION ) || name.equalsIgnoreCase(Constants.DOM_NORMALIZE_CHARACTERS)){ return Boolean.FALSE; } else if (name.equalsIgnoreCase(Constants.DOM_NAMESPACE_DECLARATIONS) || name.equalsIgnoreCase (Constants.DOM_WELLFORMED) || name.equalsIgnoreCase (Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS) || name.equalsIgnoreCase (Constants.DOM_CANONICAL_FORM) || name.equalsIgnoreCase (Constants.DOM_SUPPORTED_MEDIATYPES_ONLY) || name.equalsIgnoreCase (Constants.DOM_SPLIT_CDATA) || name.equalsIgnoreCase (Constants.DOM_CHARSET_OVERRIDES_XML_ENCODING)) { return (fConfiguration.getFeature (name.toLowerCase(Locale.ENGLISH))) ? Boolean.TRUE : Boolean.FALSE; } else if (name.equalsIgnoreCase (Constants.DOM_ERROR_HANDLER)) { if (fErrorHandler != null) { return fErrorHandler.getErrorHandler (); } return null; } else if (name.equalsIgnoreCase (Constants.DOM_RESOURCE_RESOLVER)) { try { XMLEntityResolver entityResolver = (XMLEntityResolver) fConfiguration.getProperty (ENTITY_RESOLVER); if (entityResolver != null && entityResolver instanceof DOMEntityResolverWrapper) { return ((DOMEntityResolverWrapper) entityResolver).getEntityResolver (); } return null; } catch (XMLConfigurationException e) {} } else if (name.equalsIgnoreCase (Constants.DOM_SCHEMA_TYPE)) { return fConfiguration.getProperty ( Constants.JAXP_PROPERTY_PREFIX + Constants.SCHEMA_LANGUAGE); } else if (name.equalsIgnoreCase (Constants.DOM_SCHEMA_LOCATION)) { return fSchemaLocation; } else if (name.equalsIgnoreCase (SYMBOL_TABLE)){ return fConfiguration.getProperty (SYMBOL_TABLE); } else if (name.equalsIgnoreCase (DOCUMENT_CLASS_NAME)) { return fConfiguration.getProperty (DOCUMENT_CLASS_NAME); } else { String msg = DOMMessageFormatter.formatMessage ( DOMMessageFormatter.DOM_DOMAIN, "FEATURE_NOT_FOUND", new Object[] { name }); throw new DOMException (DOMException.NOT_FOUND_ERR, msg); } return null; } public boolean canSetParameter (String name, Object value) { if (value == null){ return true; } if(value instanceof Boolean){ boolean state = ((Boolean)value).booleanValue (); if ( name.equalsIgnoreCase (Constants.DOM_SUPPORTED_MEDIATYPES_ONLY) || name.equalsIgnoreCase(Constants.DOM_NORMALIZE_CHARACTERS) || name.equalsIgnoreCase(Constants.DOM_CHECK_CHAR_NORMALIZATION ) || name.equalsIgnoreCase (Constants.DOM_CANONICAL_FORM) ) { // true is not supported return (state) ? false : true; } else if (name.equalsIgnoreCase (Constants.DOM_WELLFORMED) || name.equalsIgnoreCase (Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS)) { // false is not supported return (state) ? true : false; } else if (name.equalsIgnoreCase (Constants.DOM_CDATA_SECTIONS) || name.equalsIgnoreCase (Constants.DOM_CHARSET_OVERRIDES_XML_ENCODING) || name.equalsIgnoreCase (Constants.DOM_COMMENTS) || name.equalsIgnoreCase (Constants.DOM_DATATYPE_NORMALIZATION) || name.equalsIgnoreCase (Constants.DOM_DISALLOW_DOCTYPE) || name.equalsIgnoreCase (Constants.DOM_ENTITIES) || name.equalsIgnoreCase (Constants.DOM_INFOSET) || name.equalsIgnoreCase (Constants.DOM_NAMESPACES) || name.equalsIgnoreCase (Constants.DOM_NAMESPACE_DECLARATIONS) || name.equalsIgnoreCase (Constants.DOM_VALIDATE) || name.equalsIgnoreCase (Constants.DOM_VALIDATE_IF_SCHEMA) || name.equalsIgnoreCase (Constants.DOM_ELEMENT_CONTENT_WHITESPACE) || name.equalsIgnoreCase (Constants.DOM_XMLDECL)) { return true; } // Recognize Xerces features. try { fConfiguration.getFeature(name.toLowerCase(Locale.ENGLISH)); return true; } catch (XMLConfigurationException e) { return false; } } else { // check properties if (name.equalsIgnoreCase (Constants.DOM_ERROR_HANDLER)) { if (value instanceof DOMErrorHandler || value == null) { return true; } return false; } else if (name.equalsIgnoreCase (Constants.DOM_RESOURCE_RESOLVER)) { if (value instanceof LSResourceResolver || value == null) { return true; } return false; } else if (name.equalsIgnoreCase (Constants.DOM_SCHEMA_TYPE)) { if ((value instanceof String && (value.equals (Constants.NS_XMLSCHEMA) || value.equals (Constants.NS_DTD))) || value == null) { return true; } return false; } else if (name.equalsIgnoreCase (Constants.DOM_SCHEMA_LOCATION)) { if (value instanceof String || value == null) return true; return false; } else if (name.equalsIgnoreCase (DOCUMENT_CLASS_NAME)){ return true; } return false; } } /** * DOM Level 3 CR - Experimental. * * The list of the parameters supported by this * <code>DOMConfiguration</code> object and for which at least one value * can be set by the application. Note that this list can also contain * parameter names defined outside this specification. */ public DOMStringList getParameterNames () { if (fRecognizedParameters == null){ Vector parameters = new Vector(); // REVISIT: add Xerces recognized properties/features parameters.add(Constants.DOM_NAMESPACES); parameters.add(Constants.DOM_CDATA_SECTIONS); parameters.add(Constants.DOM_CANONICAL_FORM); parameters.add(Constants.DOM_NAMESPACE_DECLARATIONS); parameters.add(Constants.DOM_SPLIT_CDATA); parameters.add(Constants.DOM_ENTITIES); parameters.add(Constants.DOM_VALIDATE_IF_SCHEMA); parameters.add(Constants.DOM_VALIDATE); parameters.add(Constants.DOM_DATATYPE_NORMALIZATION); parameters.add(Constants.DOM_CHARSET_OVERRIDES_XML_ENCODING); parameters.add(Constants.DOM_CHECK_CHAR_NORMALIZATION); parameters.add(Constants.DOM_SUPPORTED_MEDIATYPES_ONLY); parameters.add(Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS); parameters.add(Constants.DOM_NORMALIZE_CHARACTERS); parameters.add(Constants.DOM_WELLFORMED); parameters.add(Constants.DOM_INFOSET); parameters.add(Constants.DOM_DISALLOW_DOCTYPE); parameters.add(Constants.DOM_ELEMENT_CONTENT_WHITESPACE); parameters.add(Constants.DOM_COMMENTS); parameters.add(Constants.DOM_ERROR_HANDLER); parameters.add(Constants.DOM_RESOURCE_RESOLVER); parameters.add(Constants.DOM_SCHEMA_LOCATION); parameters.add(Constants.DOM_SCHEMA_TYPE); fRecognizedParameters = new DOMStringListImpl(parameters); } return fRecognizedParameters; } /** * Parse an XML document from a location identified by an URI reference. * If the URI contains a fragment identifier (see section 4.1 in ), the * behavior is not defined by this specification. * */ public Document parseURI (String uri) throws LSException { //If DOMParser insstance is already busy parsing another document when this // method is called, then raise INVALID_STATE_ERR according to DOM L3 LS spec if ( fBusy ) { String msg = DOMMessageFormatter.formatMessage ( DOMMessageFormatter.DOM_DOMAIN, "INVALID_STATE_ERR",null); throw new DOMException ( DOMException.INVALID_STATE_ERR,msg); } XMLInputSource source = new XMLInputSource (null, uri, null); try { currentThread = Thread.currentThread(); fBusy = true; parse (source); fBusy = false; if (abortNow && currentThread.isInterrupted()) { //reset interrupt state abortNow = false; Thread.interrupted(); } } catch (Exception e){ fBusy = false; if (abortNow && currentThread.isInterrupted()) { Thread.interrupted(); } if (abortNow) { abortNow = false; restoreHandlers(); return null; } // Consume this exception if the user // issued an interrupt or an abort. if (e != abort) { if (!(e instanceof XMLParseException) && fErrorHandler != null) { DOMErrorImpl error = new DOMErrorImpl (); error.fException = e; error.fMessage = e.getMessage (); error.fSeverity = DOMError.SEVERITY_FATAL_ERROR; fErrorHandler.getErrorHandler ().handleError (error); } if (DEBUG) { e.printStackTrace (); } throw new LSException(LSException.PARSE_ERR, e.getMessage()); } } return getDocument (); } /** * Parse an XML document from a resource identified by an * <code>LSInput</code>. * */ public Document parse (LSInput is) throws LSException { // need to wrap the LSInput with an XMLInputSource XMLInputSource xmlInputSource = dom2xmlInputSource (is); if ( fBusy ) { String msg = DOMMessageFormatter.formatMessage ( DOMMessageFormatter.DOM_DOMAIN, "INVALID_STATE_ERR",null); throw new DOMException ( DOMException.INVALID_STATE_ERR,msg); } try { currentThread = Thread.currentThread(); fBusy = true; parse (xmlInputSource); fBusy = false; if (abortNow && currentThread.isInterrupted()) { //reset interrupt state abortNow = false; Thread.interrupted(); } } catch (Exception e) { fBusy = false; if (abortNow && currentThread.isInterrupted()) { Thread.interrupted(); } if (abortNow) { abortNow = false; restoreHandlers(); return null; } // Consume this exception if the user // issued an interrupt or an abort. if (e != abort) { if (!(e instanceof XMLParseException) && fErrorHandler != null) { DOMErrorImpl error = new DOMErrorImpl (); error.fException = e; error.fMessage = e.getMessage (); error.fSeverity = DOMError.SEVERITY_FATAL_ERROR; fErrorHandler.getErrorHandler().handleError (error); } if (DEBUG) { e.printStackTrace (); } throw new LSException(LSException.PARSE_ERR, e.getMessage()); } } return getDocument (); } private void restoreHandlers() { fConfiguration.setDocumentHandler(this); fConfiguration.setDTDHandler(this); fConfiguration.setDTDContentModelHandler(this); } /** * Parse an XML document or fragment from a resource identified by an * <code>LSInput</code> and insert the content into an existing * document at the position epcified with the <code>contextNode</code> * and <code>action</code> arguments. When parsing the input stream the * context node is used for resolving unbound namespace prefixes. * * @param is The <code>LSInput</code> from which the source * document is to be read. * @param cnode The <code>Node</code> that is used as the context for * the data that is being parsed. * @param action This parameter describes which action should be taken * between the new set of node being inserted and the existing * children of the context node. The set of possible actions is * defined above. * @exception DOMException * HIERARCHY_REQUEST_ERR: Thrown if this action results in an invalid * hierarchy (i.e. a Document with more than one document element). */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?