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