domparserimpl.java

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

JAVA
1,309
字号
     * element is the document element) or to terminate the parse early. If     * the document is being validated when it's loaded the validation     * happens before the filter is called.     */    public void setFilter (LSParserFilter filter) {        fDOMFilter = filter;        if (fSkippedElemStack == null) {            fSkippedElemStack = new Stack ();        }    }    /**     * Set parameters and properties     */    public void setParameter (String name, Object value) throws DOMException {        // set features    	        if(value instanceof Boolean){            boolean state = ((Boolean)value).booleanValue ();            try {                if (name.equalsIgnoreCase (Constants.DOM_COMMENTS)) {                    fConfiguration.setFeature (INCLUDE_COMMENTS_FEATURE, state);                }                else if (name.equalsIgnoreCase (Constants.DOM_DATATYPE_NORMALIZATION)) {                    fConfiguration.setFeature (NORMALIZE_DATA, state);                }                else if (name.equalsIgnoreCase (Constants.DOM_ENTITIES)) {                    fConfiguration.setFeature (CREATE_ENTITY_REF_NODES, state);                }                else if (name.equalsIgnoreCase (Constants.DOM_DISALLOW_DOCTYPE)) {                    fConfiguration.setFeature (DISALLOW_DOCTYPE_DECL_FEATURE, state);                }                else 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)) {                    if (state) { // true is not supported                        String msg =                        DOMMessageFormatter.formatMessage (                        DOMMessageFormatter.DOM_DOMAIN,                        "FEATURE_NOT_SUPPORTED",                        new Object[] { name });                        throw new DOMException (DOMException.NOT_SUPPORTED_ERR, msg);                    }                    // setting those features to false is no-op                }                else if (name.equalsIgnoreCase (Constants.DOM_NAMESPACES)) {                    fConfiguration.setFeature (NAMESPACES, state);                }                else if (name.equalsIgnoreCase (Constants.DOM_INFOSET)) {                    // Setting false has no effect.                    if (state) {                        // true: namespaces, namespace-declarations,                         // comments, element-content-whitespace                        fConfiguration.setFeature(NAMESPACES, true);                        fConfiguration.setFeature(Constants.DOM_NAMESPACE_DECLARATIONS, true);                        fConfiguration.setFeature(INCLUDE_COMMENTS_FEATURE, true);                        fConfiguration.setFeature(INCLUDE_IGNORABLE_WHITESPACE, true);                        // false: validate-if-schema, entities,                        // datatype-normalization, cdata-sections                        fConfiguration.setFeature(DYNAMIC_VALIDATION, false);                        fConfiguration.setFeature(CREATE_ENTITY_REF_NODES, false);                        fConfiguration.setFeature(NORMALIZE_DATA, false);                        fConfiguration.setFeature(CREATE_CDATA_NODES_FEATURE, false);                    }                }                else if (name.equalsIgnoreCase(Constants.DOM_CDATA_SECTIONS)) {                    fConfiguration.setFeature(CREATE_CDATA_NODES_FEATURE, state);                }                else if (name.equalsIgnoreCase (Constants.DOM_NAMESPACE_DECLARATIONS)) {                    fConfiguration.setFeature(Constants.DOM_NAMESPACE_DECLARATIONS, state);                }                else if (name.equalsIgnoreCase (Constants.DOM_WELLFORMED)                || name.equalsIgnoreCase (Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS)) {                    if (!state) { // false is not supported                        String msg =                        DOMMessageFormatter.formatMessage (                        DOMMessageFormatter.DOM_DOMAIN,                        "FEATURE_NOT_SUPPORTED",                        new Object[] { name });                        throw new DOMException (DOMException.NOT_SUPPORTED_ERR, msg);                    }                    // setting these features to true is no-op                    // REVISIT: implement "namespace-declaration" feature                }                else if (name.equalsIgnoreCase (Constants.DOM_VALIDATE)) {                    fConfiguration.setFeature (VALIDATION_FEATURE, state);                    if (fSchemaType != Constants.NS_DTD) {                        fConfiguration.setFeature (XMLSCHEMA, state);                        fConfiguration.setFeature (XMLSCHEMA_FULL_CHECKING, state);                    }                    if (state){                        fConfiguration.setFeature (DYNAMIC_VALIDATION, false);                    }                }                else if (name.equalsIgnoreCase (Constants.DOM_VALIDATE_IF_SCHEMA)) {                    fConfiguration.setFeature (DYNAMIC_VALIDATION, state);                    // Note: validation and dynamic validation are mutually exclusive                    if (state){                        fConfiguration.setFeature (VALIDATION_FEATURE, false);                    }                }                else if (name.equalsIgnoreCase (Constants.DOM_ELEMENT_CONTENT_WHITESPACE)) {                    fConfiguration.setFeature (INCLUDE_IGNORABLE_WHITESPACE, state);                }                else if (name.equalsIgnoreCase (Constants.DOM_PSVI)){                    //XSModel - turn on PSVI augmentation                    fConfiguration.setFeature (PSVI_AUGMENT, true);                    fConfiguration.setProperty (DOCUMENT_CLASS_NAME,                    "com.sun.org.apache.xerces.internal.dom.PSVIDocumentImpl");                }                else {                    // Constants.DOM_CHARSET_OVERRIDES_XML_ENCODING feature,                    // Constants.DOM_SPLIT_CDATA feature,                    // or any Xerces feature                    fConfiguration.setFeature (name.toLowerCase(Locale.ENGLISH), state);                }            }            catch (XMLConfigurationException e) {                String msg =                DOMMessageFormatter.formatMessage (                DOMMessageFormatter.DOM_DOMAIN,                "FEATURE_NOT_FOUND",                new Object[] { name });                throw new DOMException (DOMException.NOT_FOUND_ERR, msg);            }        }        else { // set properties            if (name.equalsIgnoreCase (Constants.DOM_ERROR_HANDLER)) {                if (value instanceof DOMErrorHandler || value == null) {                    try {                        fErrorHandler = new DOMErrorHandlerWrapper ((DOMErrorHandler) value);                        fConfiguration.setProperty (ERROR_HANDLER, fErrorHandler);                    }                    catch (XMLConfigurationException e) {}                }                else {                    // REVISIT: type mismatch                    String msg =                    DOMMessageFormatter.formatMessage (                    DOMMessageFormatter.DOM_DOMAIN,                    "TYPE_MISMATCH_ERR",                    new Object[] { name });                    throw new DOMException (DOMException.TYPE_MISMATCH_ERR, msg);                }            }            else if (name.equalsIgnoreCase (Constants.DOM_RESOURCE_RESOLVER)) {                if (value instanceof LSResourceResolver || value == null) {                    try {                        fConfiguration.setProperty (ENTITY_RESOLVER, new DOMEntityResolverWrapper ((LSResourceResolver) value));                    }                    catch (XMLConfigurationException e) {}                }                else {                    // REVISIT: type mismatch                    String msg =                    DOMMessageFormatter.formatMessage (                    DOMMessageFormatter.DOM_DOMAIN,                    "TYPE_MISMATCH_ERR",                    new Object[] { name });                    throw new DOMException (DOMException.TYPE_MISMATCH_ERR, msg);                }            }            else if (name.equalsIgnoreCase (Constants.DOM_SCHEMA_LOCATION)) {                if (value instanceof String || value == null) {                    try {                        if (value == null) {                            fSchemaLocation = null;                            fConfiguration.setProperty (                                Constants.JAXP_PROPERTY_PREFIX + Constants.SCHEMA_SOURCE,                                null);                        }                        else {                            fSchemaLocation = (String)value;                            // map DOM schema-location to JAXP schemaSource property                            // tokenize location string                            StringTokenizer t = new StringTokenizer (fSchemaLocation, " \n\t\r");                            if (t.hasMoreTokens ()){                                fSchemaLocations.clear ();                                fSchemaLocations.add (t.nextToken ());                                while (t.hasMoreTokens ()) {                                    fSchemaLocations.add (t.nextToken ());                                }                                fConfiguration.setProperty (                                Constants.JAXP_PROPERTY_PREFIX + Constants.SCHEMA_SOURCE,                                fSchemaLocations.toArray ());                            }                            else {                                fConfiguration.setProperty (                                Constants.JAXP_PROPERTY_PREFIX + Constants.SCHEMA_SOURCE,                                value);                            }                        }                    }                    catch (XMLConfigurationException e) {}                }                else {                    // REVISIT: type mismatch                    String msg =                    DOMMessageFormatter.formatMessage (                    DOMMessageFormatter.DOM_DOMAIN,                    "TYPE_MISMATCH_ERR",                    new Object[] { name });                    throw new DOMException (DOMException.TYPE_MISMATCH_ERR, msg);                }            }            else if (name.equalsIgnoreCase (Constants.DOM_SCHEMA_TYPE)) {                if (value instanceof String || value == null) {                    try {                        if (value == null) {                            // turn off schema features                            fConfiguration.setFeature (XMLSCHEMA, false);                            fConfiguration.setFeature (XMLSCHEMA_FULL_CHECKING, false);                            // map to JAXP schemaLanguage                            fConfiguration.setProperty ( Constants.JAXP_PROPERTY_PREFIX                            + Constants.SCHEMA_LANGUAGE,                            null);                            fSchemaType = null;                        }                        else if (value.equals (Constants.NS_XMLSCHEMA)) {                            // turn on schema features                            fConfiguration.setFeature (XMLSCHEMA, true);                            fConfiguration.setFeature (XMLSCHEMA_FULL_CHECKING, true);                            // map to JAXP schemaLanguage                            fConfiguration.setProperty ( Constants.JAXP_PROPERTY_PREFIX                            + Constants.SCHEMA_LANGUAGE,                            Constants.NS_XMLSCHEMA);                            fSchemaType = Constants.NS_XMLSCHEMA;                        }                        else if (value.equals (Constants.NS_DTD)) {                            // turn off schema features                            fConfiguration.setFeature (XMLSCHEMA, false);                            fConfiguration.setFeature (XMLSCHEMA_FULL_CHECKING, false);                            // map to JAXP schemaLanguage                            fConfiguration.setProperty ( Constants.JAXP_PROPERTY_PREFIX                            + Constants.SCHEMA_LANGUAGE,                            Constants.NS_DTD);                            fSchemaType = Constants.NS_DTD;                        }                    }                    catch (XMLConfigurationException e) {}                }                else {                    String msg =                    DOMMessageFormatter.formatMessage (                    DOMMessageFormatter.DOM_DOMAIN,                    "TYPE_MISMATCH_ERR",                    new Object[] { name });                    throw new DOMException (DOMException.TYPE_MISMATCH_ERR, msg);                }            }            else if (name.equalsIgnoreCase (DOCUMENT_CLASS_NAME)) {                fConfiguration.setProperty (DOCUMENT_CLASS_NAME, value);            }            else {                // REVISIT: check if this is a boolean parameter -- type mismatch should be thrown.                //parameter is not recognized                String msg =                DOMMessageFormatter.formatMessage (                DOMMessageFormatter.DOM_DOMAIN,                "FEATURE_NOT_FOUND",                new Object[] { name });                throw new DOMException (DOMException.NOT_FOUND_ERR, msg);            }        }    }    /**     * Look up the value of a feature or a property.     */    public Object getParameter (String name) throws DOMException {        if (name.equalsIgnoreCase (Constants.DOM_COMMENTS)) {            return (fConfiguration.getFeature (INCLUDE_COMMENTS_FEATURE))            ? Boolean.TRUE            : Boolean.FALSE;        }        else if (name.equalsIgnoreCase (Constants.DOM_DATATYPE_NORMALIZATION)) {            return (fConfiguration.getFeature (NORMALIZE_DATA))            ? Boolean.TRUE            : Boolean.FALSE;        }        else if (name.equalsIgnoreCase (Constants.DOM_ENTITIES)) {            return (fConfiguration.getFeature (CREATE_ENTITY_REF_NODES))            ? Boolean.TRUE            : Boolean.FALSE;        }        else if (name.equalsIgnoreCase (Constants.DOM_NAMESPACES)) {            return (fConfiguration.getFeature (NAMESPACES))            ? Boolean.TRUE            : Boolean.FALSE;        }        else if (name.equalsIgnoreCase (Constants.DOM_VALIDATE)) {            return (fConfiguration.getFeature (VALIDATION_FEATURE))            ? Boolean.TRUE            : Boolean.FALSE;        }        else if (name.equalsIgnoreCase (Constants.DOM_VALIDATE_IF_SCHEMA)) {            return (fConfiguration.getFeature (DYNAMIC_VALIDATION))            ? Boolean.TRUE            : Boolean.FALSE;        }        else if (name.equalsIgnoreCase (Constants.DOM_ELEMENT_CONTENT_WHITESPACE)) {            return (fConfiguration.getFeature (INCLUDE_IGNORABLE_WHITESPACE))            ? Boolean.TRUE            : Boolean.FALSE;        }        else if (name.equalsIgnoreCase (Constants.DOM_DISALLOW_DOCTYPE)) {            return (fConfiguration.getFeature (DISALLOW_DOCTYPE_DECL_FEATURE))            ? Boolean.TRUE            : Boolean.FALSE;        }        else if (name.equalsIgnoreCase (Constants.DOM_INFOSET)) {            // REVISIT: This is somewhat expensive to compute            // but it's possible that the user has a reference            // to the configuration and is changing the values            // of these features directly on it.            boolean infoset = fConfiguration.getFeature(NAMESPACES) &&                fConfiguration.getFeature(Constants.DOM_NAMESPACE_DECLARATIONS) &&                fConfiguration.getFeature(INCLUDE_COMMENTS_FEATURE) &&                fConfiguration.getFeature(INCLUDE_IGNORABLE_WHITESPACE) &&                !fConfiguration.getFeature(DYNAMIC_VALIDATION) &&                !fConfiguration.getFeature(CREATE_ENTITY_REF_NODES) &&

⌨️ 快捷键说明

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