domparserimpl.java

来自「JAVA的一些源码 JAVA2 STANDARD EDITION DEVELO」· Java 代码 · 共 1,089 行 · 第 1/3 页

JAVA
1,089
字号
/* * The Apache Software License, Version 1.1 * * * Copyright (c) 2000-2004 The Apache Software Foundation.  All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * * 3. The end-user documentation included with the redistribution, *    if any, must include the following acknowledgment: *       "This product includes software developed by the *        Apache Software Foundation (http://www.apache.org/)." *    Alternately, this acknowledgment may appear in the software itself, *    if and wherever such third-party acknowledgments normally appear. * * 4. The names "Xerces" and "Apache Software Foundation" must *    not be used to endorse or promote products derived from this *    software without prior written permission. For written *    permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", *    nor may "Apache" appear in their name, without prior written *    permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation and was * originally based on software copyright (c) 2001, International * Business Machines, Inc., http://www.apache.org.  For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */package com.sun.org.apache.xerces.internal.parsers;import java.io.StringReader;import java.util.Locale;import java.util.Stack;import java.util.StringTokenizer;import java.util.Vector;import java.util.Locale;import com.sun.org.apache.xerces.internal.dom.DOMErrorImpl;import com.sun.org.apache.xerces.internal.dom.DOMMessageFormatter;import com.sun.org.apache.xerces.internal.dom.DOMStringListImpl;import org.w3c.dom.DOMError;import com.sun.org.apache.xerces.internal.impl.Constants;import com.sun.org.apache.xerces.internal.util.DOMEntityResolverWrapper;import com.sun.org.apache.xerces.internal.util.DOMErrorHandlerWrapper;import com.sun.org.apache.xerces.internal.util.SymbolTable;import com.sun.org.apache.xerces.internal.xni.grammars.XMLGrammarPool;import com.sun.org.apache.xerces.internal.xni.parser.XMLConfigurationException;import com.sun.org.apache.xerces.internal.xni.parser.XMLEntityResolver;import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource;import com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration;import org.w3c.dom.DOMConfiguration;import org.w3c.dom.DOMErrorHandler;import org.w3c.dom.DOMException;import org.w3c.dom.Document;import org.w3c.dom.DOMStringList;import org.w3c.dom.Node;import org.w3c.dom.ls.LSException;import org.w3c.dom.ls.LSParser;import org.w3c.dom.ls.LSParserFilter;import org.w3c.dom.ls.LSResourceResolver;import org.w3c.dom.ls.LSInput;/** * This is Xerces DOM Builder class. It uses the abstract DOM * parser with a document scanner, a dtd scanner, and a validator, as * well as a grammar pool. * * @author Pavani Mukthipudi, Sun Microsystems Inc. * @author Elena Litani, IBM * @author Rahul Srivastava, Sun Microsystems Inc. * @version $Id: DOMParserImpl.java,v 1.25 2004/04/23 16:06:10 mrglavas Exp $ */public class DOMParserImplextends AbstractDOMParser implements LSParser, DOMConfiguration {    // SAX & Xerces feature ids    /** Feature identifier: namespaces. */    protected static final String NAMESPACES =    Constants.SAX_FEATURE_PREFIX + Constants.NAMESPACES_FEATURE;    /** Feature id: validation. */    protected static final String VALIDATION_FEATURE =    Constants.SAX_FEATURE_PREFIX+Constants.VALIDATION_FEATURE;    /** XML Schema validation */    protected static final String XMLSCHEMA =    Constants.XERCES_FEATURE_PREFIX + Constants.SCHEMA_VALIDATION_FEATURE;    /** Dynamic validation */    protected static final String DYNAMIC_VALIDATION =    Constants.XERCES_FEATURE_PREFIX + Constants.DYNAMIC_VALIDATION_FEATURE;    /** Feature identifier: expose schema normalized value */    protected static final String NORMALIZE_DATA =    Constants.XERCES_FEATURE_PREFIX + Constants.SCHEMA_NORMALIZED_VALUE;    /** Feature identifier: disallow docType Decls. */    protected static final String DISALLOW_DOCTYPE_DECL_FEATURE =        Constants.XERCES_FEATURE_PREFIX + Constants.DISALLOW_DOCTYPE_DECL_FEATURE;    // internal properties    protected static final String SYMBOL_TABLE =    Constants.XERCES_PROPERTY_PREFIX + Constants.SYMBOL_TABLE_PROPERTY;    protected static final String PSVI_AUGMENT =    Constants.XERCES_FEATURE_PREFIX +Constants.SCHEMA_AUGMENT_PSVI;	Thread currentThread = null;    //    // Data    //    // REVISIT: this value should be null by default and should be set during creation of    //          LSParser    protected String fSchemaType = null;    protected boolean fBusy = false;    protected final static boolean DEBUG = false;    private Vector fSchemaLocations = new Vector ();    private String fSchemaLocation = null;	private DOMStringList fRecognizedParameters;	private boolean abortNow = false;    //    // Constructors    //    /**     * Constructs a DOM Builder using the standard parser configuration.     */    public DOMParserImpl (String configuration, String schemaType) {        this (        (XMLParserConfiguration) ObjectFactory.createObject (        "com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration",        configuration));        if (schemaType != null) {            if (schemaType.equals (Constants.NS_DTD)) {                fConfiguration.setFeature (                Constants.XERCES_FEATURE_PREFIX + Constants.SCHEMA_VALIDATION_FEATURE,                false);                fConfiguration.setProperty (                Constants.JAXP_PROPERTY_PREFIX + Constants.SCHEMA_LANGUAGE,                Constants.NS_DTD);                fSchemaType = Constants.NS_DTD;            }            else if (schemaType.equals (Constants.NS_XMLSCHEMA)) {                // XML Schem validation                fConfiguration.setProperty (                Constants.JAXP_PROPERTY_PREFIX + Constants.SCHEMA_LANGUAGE,                Constants.NS_XMLSCHEMA);            }        }    }    /**     * Constructs a DOM Builder using the specified parser configuration.     */    public DOMParserImpl (XMLParserConfiguration config) {        super (config);        // add recognized features        final String[] domRecognizedFeatures = {            Constants.DOM_CANONICAL_FORM,            Constants.DOM_CDATA_SECTIONS,            Constants.DOM_CHARSET_OVERRIDES_XML_ENCODING,            Constants.DOM_INFOSET,            Constants.DOM_NAMESPACE_DECLARATIONS,            Constants.DOM_SPLIT_CDATA,            Constants.DOM_SUPPORTED_MEDIATYPES_ONLY,            Constants.DOM_CERTIFIED,            Constants.DOM_WELLFORMED,            Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS,        };        fConfiguration.addRecognizedFeatures (domRecognizedFeatures);        // turn off deferred DOM        fConfiguration.setFeature (DEFER_NODE_EXPANSION, false);        // Set values so that the value of the        // infoset parameter is true (its default value).        //        // true: namespace-declarations, well-formed,        // element-content-whitespace, comments, namespaces        //        // false: validate-if-schema, entities,        // datatype-normalization, cdata-sections        fConfiguration.setFeature(Constants.DOM_NAMESPACE_DECLARATIONS, true);        fConfiguration.setFeature(Constants.DOM_WELLFORMED, true);        fConfiguration.setFeature(INCLUDE_COMMENTS_FEATURE, true);        fConfiguration.setFeature(INCLUDE_IGNORABLE_WHITESPACE, true);        fConfiguration.setFeature(NAMESPACES, true);        fConfiguration.setFeature(DYNAMIC_VALIDATION, false);        fConfiguration.setFeature(CREATE_ENTITY_REF_NODES, false);        fConfiguration.setFeature(NORMALIZE_DATA, false);        fConfiguration.setFeature(CREATE_CDATA_NODES_FEATURE, false);        // set other default values        fConfiguration.setFeature (Constants.DOM_CANONICAL_FORM, false);        fConfiguration.setFeature (Constants.DOM_CHARSET_OVERRIDES_XML_ENCODING, true);        fConfiguration.setFeature (Constants.DOM_SPLIT_CDATA, true);        fConfiguration.setFeature (Constants.DOM_SUPPORTED_MEDIATYPES_ONLY, false);        fConfiguration.setFeature (Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS, true);        // REVISIT: by default Xerces assumes that input is certified.        //          default is different from the one specified in the DOM spec        fConfiguration.setFeature (Constants.DOM_CERTIFIED, true);        // Xerces datatype-normalization feature is on by default        fConfiguration.setFeature( NORMALIZE_DATA, false );    } // <init>(XMLParserConfiguration)    /**     * Constructs a DOM Builder using the specified symbol table.     */	public DOMParserImpl(SymbolTable symbolTable) {		this(			(XMLParserConfiguration) ObjectFactory.createObject(				"com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration",				"com.sun.org.apache.xerces.internal.parsers.XIncludeParserConfiguration"));		fConfiguration.setProperty(			Constants.XERCES_PROPERTY_PREFIX + Constants.SYMBOL_TABLE_PROPERTY,			symbolTable);	} // <init>(SymbolTable)    /**     * Constructs a DOM Builder using the specified symbol table and     * grammar pool.     */	public DOMParserImpl(SymbolTable symbolTable, XMLGrammarPool grammarPool) {		this(			(XMLParserConfiguration) ObjectFactory.createObject(				"com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration",				"com.sun.org.apache.xerces.internal.parsers.XIncludeParserConfiguration"));		fConfiguration.setProperty(			Constants.XERCES_PROPERTY_PREFIX + Constants.SYMBOL_TABLE_PROPERTY,			symbolTable);		fConfiguration.setProperty(			Constants.XERCES_PROPERTY_PREFIX				+ Constants.XMLGRAMMAR_POOL_PROPERTY,			grammarPool);	}    /**     * Resets the parser state.     *     * @throws SAXException Thrown on initialization error.     */    public void reset() {        super.reset();        // DOM Filter        if (fSkippedElemStack!=null) {            fSkippedElemStack.removeAllElements();        }		fSchemaLocations.clear();        fRejectedElement.clear();        fFilterReject = false;        fSchemaType = null;    } // reset()    //    // DOMParser methods    //    public DOMConfiguration getDomConfig (){        return this;    }    /**     *  When the application provides a filter, the parser will call out to     * the filter at the completion of the construction of each     * <code>Element</code> node. The filter implementation can choose to     * remove the element from the document being constructed (unless the     * 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 LSParserFilter getFilter() {        return fDOMFilter;    }    /**     *  When the application provides a filter, the parser will call out to     * the filter at the completion of the construction of each     * <code>Element</code> node. The filter implementation can choose to     * remove the element from the document being constructed (unless the     * 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)

⌨️ 快捷键说明

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