domserializerimpl.java

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

JAVA
1,212
字号
                || name.equalsIgnoreCase(Constants.DOM_XMLDECL)                || name.equalsIgnoreCase(Constants.DOM_WELLFORMED)                || name.equalsIgnoreCase(Constants.DOM_INFOSET)                || name.equalsIgnoreCase(Constants.DOM_ENTITIES)                || name.equalsIgnoreCase(Constants.DOM_CDATA_SECTIONS)                || name.equalsIgnoreCase(Constants.DOM_COMMENTS)                || name.equalsIgnoreCase(Constants.DOM_NAMESPACE_DECLARATIONS)                || name.equalsIgnoreCase(Constants.DOM_FORMAT_PRETTY_PRINT)) {                // both values supported                return true;            } else if (name.equalsIgnoreCase(Constants.DOM_CANONICAL_FORM)                || name.equalsIgnoreCase(Constants.DOM_VALIDATE_IF_SCHEMA)                || name.equalsIgnoreCase(Constants.DOM_VALIDATE)                || name.equalsIgnoreCase(Constants.DOM_CHECK_CHAR_NORMALIZATION)                || name.equalsIgnoreCase(Constants.DOM_DATATYPE_NORMALIZATION)) {                // || name.equalsIgnoreCase(Constants.DOM_NORMALIZE_CHARACTERS)) {                // true is not supported                return !value;            } else if (name.equalsIgnoreCase(Constants.DOM_ELEMENT_CONTENT_WHITESPACE)                || name.equalsIgnoreCase(Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS)) {                // false is not supported                return value;            }        } else if (name.equalsIgnoreCase(Constants.DOM_ERROR_HANDLER) &&            state == null || state instanceof DOMErrorHandler) {            return true;        }                return false;    }    /**     *  DOM Level 3 Core 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();			//Add DOM recognized parameters			//REVISIT: Would have been nice to have a list of 			//recognized parameters.			parameters.add(Constants.DOM_NAMESPACES);			parameters.add(Constants.DOM_SPLIT_CDATA);			parameters.add(Constants.DOM_DISCARD_DEFAULT_CONTENT);			parameters.add(Constants.DOM_XMLDECL);			parameters.add(Constants.DOM_CANONICAL_FORM);			parameters.add(Constants.DOM_VALIDATE_IF_SCHEMA);			parameters.add(Constants.DOM_VALIDATE);			parameters.add(Constants.DOM_CHECK_CHAR_NORMALIZATION); 			parameters.add(Constants.DOM_DATATYPE_NORMALIZATION);			parameters.add(Constants.DOM_FORMAT_PRETTY_PRINT);			//parameters.add(Constants.DOM_NORMALIZE_CHARACTERS); 			parameters.add(Constants.DOM_WELLFORMED);			parameters.add(Constants.DOM_INFOSET);			parameters.add(Constants.DOM_NAMESPACE_DECLARATIONS);			parameters.add(Constants.DOM_ELEMENT_CONTENT_WHITESPACE);			parameters.add(Constants.DOM_ENTITIES);			parameters.add(Constants.DOM_CDATA_SECTIONS);			parameters.add(Constants.DOM_COMMENTS);			parameters.add(Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS);			parameters.add(Constants.DOM_ERROR_HANDLER);			//parameters.add(Constants.DOM_SCHEMA_LOCATION);			//parameters.add(Constants.DOM_SCHEMA_TYPE);						//Add recognized xerces features and properties						fRecognizedParameters = new DOMStringListImpl(parameters);		    		    	}    	return fRecognizedParameters; 	    }	        /** DOM L3-EXPERIMENTAL:     * Getter for boolean and object parameters     */    public Object getParameter(String name) throws DOMException {                if(name.equalsIgnoreCase(Constants.DOM_NORMALIZE_CHARACTERS)){                      return null;        } else if (name.equalsIgnoreCase(Constants.DOM_COMMENTS)) {            return ((features & COMMENTS) != 0) ? Boolean.TRUE : Boolean.FALSE;        } else if (name.equalsIgnoreCase(Constants.DOM_NAMESPACES)) {            return (features & NAMESPACES) != 0 ? Boolean.TRUE : Boolean.FALSE;        } else if (name.equalsIgnoreCase(Constants.DOM_XMLDECL)) {            return (features & XMLDECL) != 0 ? Boolean.TRUE : Boolean.FALSE;        } else if (name.equalsIgnoreCase(Constants.DOM_CDATA_SECTIONS)) {            return (features & CDATA) != 0 ? Boolean.TRUE : Boolean.FALSE;        } else if (name.equalsIgnoreCase(Constants.DOM_ENTITIES)) {            return (features & ENTITIES) != 0 ? Boolean.TRUE : Boolean.FALSE;        } else if (name.equalsIgnoreCase(Constants.DOM_SPLIT_CDATA)) {            return (features & SPLITCDATA) != 0 ? Boolean.TRUE : Boolean.FALSE;        } else if (name.equalsIgnoreCase(Constants.DOM_WELLFORMED)) {            return (features & WELLFORMED) != 0 ? Boolean.TRUE : Boolean.FALSE;        } else if (name.equalsIgnoreCase(Constants.DOM_NAMESPACE_DECLARATIONS)) {            return (features & NSDECL) != 0 ? Boolean.TRUE : Boolean.FALSE;                    } else if (name.equalsIgnoreCase(Constants.DOM_FORMAT_PRETTY_PRINT)) {            return (features & FORMAT_PRETTY_PRINT) != 0 ? Boolean.TRUE : Boolean.FALSE;                    } else if (name.equalsIgnoreCase(Constants.DOM_ELEMENT_CONTENT_WHITESPACE) ||                   name.equalsIgnoreCase(Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS)) {            return Boolean.TRUE;        }else if (name.equalsIgnoreCase(Constants.DOM_DISCARD_DEFAULT_CONTENT)){            return ((features & DISCARDDEFAULT)!=0)?Boolean.TRUE:Boolean.FALSE;        }else if (name.equalsIgnoreCase(Constants.DOM_INFOSET)){            if ((features & ENTITIES) == 0 &&                 (features & CDATA) == 0 &&                 (features & NAMESPACES) != 0 &&                 (features & NSDECL) != 0 &&                 (features & WELLFORMED) != 0 &&                 (features & COMMENTS) != 0) {                     return Boolean.TRUE;                 }                                  return Boolean.FALSE;         } else if (name.equalsIgnoreCase(Constants.DOM_CANONICAL_FORM)                || name.equalsIgnoreCase(Constants.DOM_VALIDATE_IF_SCHEMA)                || name.equalsIgnoreCase(Constants.DOM_CHECK_CHAR_NORMALIZATION)                || name.equalsIgnoreCase(Constants.DOM_VALIDATE)                || name.equalsIgnoreCase(Constants.DOM_VALIDATE_IF_SCHEMA)                || name.equalsIgnoreCase(Constants.DOM_DATATYPE_NORMALIZATION)) {            return Boolean.FALSE;        } else if (name.equalsIgnoreCase(Constants.DOM_ERROR_HANDLER)) {            return fErrorHandler;        } else if (            name.equalsIgnoreCase(Constants.DOM_RESOURCE_RESOLVER)                || name.equalsIgnoreCase(Constants.DOM_SCHEMA_LOCATION)                || name.equalsIgnoreCase(Constants.DOM_SCHEMA_TYPE)) {            String msg =                DOMMessageFormatter.formatMessage(                    DOMMessageFormatter.DOM_DOMAIN,                    "FEATURE_NOT_SUPPORTED",                    new Object[] { name });            throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg);        } else {            String msg =                DOMMessageFormatter.formatMessage(                    DOMMessageFormatter.DOM_DOMAIN,                    "FEATURE_NOT_FOUND",                    new Object[] { name });            throw new DOMException(DOMException.NOT_FOUND_ERR, msg);        }    }    /**     * DOM L3 EXPERIMENTAL:     *  Serialize the specified node as described above in the description of     * <code>LSSerializer</code>. The result of serializing the node is     * returned as a string. Writing a Document or Entity node produces a     * serialized form that is well formed XML. Writing other node types     * produces a fragment of text in a form that is not fully defined by     * this document, but that should be useful to a human for debugging or     * diagnostic purposes.     * @param wnode  The node to be written.     * @return  Returns the serialized data     * @exception DOMException     *    DOMSTRING_SIZE_ERR: The resulting string is too long to fit in a     *   <code>DOMString</code>.     * @exception LSException     *    SERIALIZE_ERR: Unable to serialize the node.  DOM applications should     *    attach a <code>DOMErrorHandler</code> using the parameter      *    &quot;<i>error-handler</i>&quot; to get details on error.     */    public String writeToString(Node wnode) throws DOMException, LSException {        // determine which serializer to use:        Document doc = (wnode.getNodeType() == Node.DOCUMENT_NODE)?(Document)wnode:wnode.getOwnerDocument();        Method getVersion = null;        XMLSerializer ser = null;        String ver = null;        // this should run under JDK 1.1.8...        try {            getVersion = doc.getClass().getMethod("getXmlVersion", new Class[]{});            if(getVersion != null ) {                ver = (String)getVersion.invoke(doc, (Object[]) null);            }        } catch (Exception e) {            // no way to test the version...            // ignore the exception        }        if(ver != null && ver.equals("1.1")) {            if(xml11Serializer == null) {                xml11Serializer = new XML11Serializer();                initSerializer(xml11Serializer);            }            // copy setting from "main" serializer to XML 1.1 serializer            copySettings(serializer, xml11Serializer);            ser = xml11Serializer;        } else {            ser = serializer;        }        StringWriter destination = new StringWriter();        try {            prepareForSerialization(ser, wnode);            ser._format.setEncoding("UTF-16");            ser.setOutputCharStream(destination);            if (wnode.getNodeType() == Node.DOCUMENT_NODE) {                ser.serialize((Document)wnode);            }            else if (wnode.getNodeType() == Node.DOCUMENT_FRAGMENT_NODE) {                ser.serialize((DocumentFragment)wnode);            }            else if (wnode.getNodeType() == Node.ELEMENT_NODE) {                ser.serialize((Element)wnode);            }            else if (wnode.getNodeType() == Node.TEXT_NODE ||                     wnode.getNodeType() == Node.COMMENT_NODE ||                    wnode.getNodeType() == Node.ENTITY_REFERENCE_NODE ||                    wnode.getNodeType() == Node.CDATA_SECTION_NODE ||                    wnode.getNodeType() == Node.PROCESSING_INSTRUCTION_NODE ) {                ser.serialize(wnode);            }            else {                String msg = DOMMessageFormatter.formatMessage(                    DOMMessageFormatter.SERIALIZER_DOMAIN,                     "unable-to-serialize-node", null);                if (ser.fDOMErrorHandler != null) {                    DOMErrorImpl error = new DOMErrorImpl();                    error.fType = "unable-to-serialize-node";                    error.fMessage = msg;                    error.fSeverity = DOMError.SEVERITY_FATAL_ERROR;                    ser.fDOMErrorHandler.handleError(error);                }                throw new LSException(LSException.SERIALIZE_ERR, msg);            }        } catch (LSException lse) {            // Rethrow LSException.            throw lse;        } catch (RuntimeException e) {            if (e == DOMNormalizer.abort){                // stopped at user request                return null;            }            throw new LSException(LSException.SERIALIZE_ERR, e.toString());                    } catch (IOException ioe) {            // REVISIT: A generic IOException doesn't provide enough information            // to determine that the serialized document is too large to fit            // into a string. This could have thrown for some other reason. -- mrglavas            String msg = DOMMessageFormatter.formatMessage(                DOMMessageFormatter.DOM_DOMAIN,                "STRING_TOO_LONG",                new Object[] { ioe.getMessage()});            throw new DOMException(DOMException.DOMSTRING_SIZE_ERR,msg);        }                return destination.toString();    }    /**     * DOM L3 EXPERIMENTAL:     * The end-of-line sequence of characters to be used in the XML being     * written out. The only permitted values are these:     * <dl>     * <dt><code>null</code></dt>     * <dd>     * Use a default end-of-line sequence. DOM implementations should choose     * the default to match the usual convention for text files in the     * environment being used. Implementations must choose a default     * sequence that matches one of those allowed by  2.11 "End-of-Line     * Handling". </dd>     * <dt>CR</dt>     * <dd>The carriage-return character (#xD).</dd>     * <dt>CR-LF</dt>     * <dd> The     * carriage-return and line-feed characters (#xD #xA). </dd>     * <dt>LF</dt>     * <dd> The line-feed     * character (#xA). </dd>     * </dl>     * <br>The default value for this attribute is <code>null</code>.     */    public void setNewLine(String newLine) {        serializer._format.setLineSeparator(newLine);    }    /**     * DOM L3 EXPERIMENTAL:     * The end-of-line sequence of characters to be used in the XML being     * written out. The only permitted values are these:     * <dl>     * <dt><code>null</code></dt>     * <dd>     * Use a default end-of-line sequence. DOM implementations should choose     * the default to match the usual convention for text files in the     * environment being used. Implementations must choose a default     * sequence that matches one of those allowed by  2.11 "End-of-Line     * Handling". </dd>     * <dt>CR</dt>     * <dd>The carriage-return character (#xD).</dd>     * <dt>CR-LF</dt>     * <dd> The     * carriage-return and line-feed characters (#xD #xA). </dd>     * <dt>LF</dt>     * <dd> The line-feed     * character (#xA). </dd>     * </dl>     * <br>The default value for this attribute is <code>null</code>.

⌨️ 快捷键说明

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