domparser.java

来自「JAVA 所有包」· Java 代码 · 共 596 行 · 第 1/2 页

JAVA
596
字号
/* * Copyright 2000-2005 The Apache Software Foundation. *  * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *  *      http://www.apache.org/licenses/LICENSE-2.0 *  * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package com.sun.org.apache.xerces.internal.parsers;import java.io.IOException;import com.sun.org.apache.xerces.internal.impl.Constants;import com.sun.org.apache.xerces.internal.util.EntityResolverWrapper;import com.sun.org.apache.xerces.internal.util.EntityResolver2Wrapper;import com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper;import com.sun.org.apache.xerces.internal.util.SAXMessageFormatter;import com.sun.org.apache.xerces.internal.util.SymbolTable;import com.sun.org.apache.xerces.internal.xni.XNIException;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.XMLErrorHandler;import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource;import com.sun.org.apache.xerces.internal.xni.parser.XMLParseException;import com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration;import org.w3c.dom.Node;import org.xml.sax.EntityResolver;import org.xml.sax.ErrorHandler;import org.xml.sax.InputSource;import org.xml.sax.SAXException;import org.xml.sax.SAXNotRecognizedException;import org.xml.sax.SAXNotSupportedException;import org.xml.sax.SAXParseException;import org.xml.sax.ext.EntityResolver2;import org.xml.sax.helpers.LocatorImpl;/** * This is the main Xerces DOM parser class. It uses the abstract DOM * parser with a document scanner, a dtd scanner, and a validator, as * well as a grammar pool. * * @author Arnaud  Le Hors, IBM * @author Andy Clark, IBM * * @version $Id: DOMParser.java,v 1.2.6.1 2005/09/06 13:06:37 sunithareddy Exp $ */public class DOMParser    extends AbstractDOMParser {    //    // Constants    //        // features        /** Feature identifier: EntityResolver2. */    protected static final String USE_ENTITY_RESOLVER2 =        Constants.SAX_FEATURE_PREFIX + Constants.USE_ENTITY_RESOLVER2_FEATURE;    // properties    /** Property identifier: symbol table. */    protected static final String SYMBOL_TABLE =        Constants.XERCES_PROPERTY_PREFIX + Constants.SYMBOL_TABLE_PROPERTY;    /** Property identifier: XML grammar pool. */    protected static final String XMLGRAMMAR_POOL =        Constants.XERCES_PROPERTY_PREFIX+Constants.XMLGRAMMAR_POOL_PROPERTY;    /** Recognized properties. */    private static final String[] RECOGNIZED_PROPERTIES = {        SYMBOL_TABLE,        XMLGRAMMAR_POOL,    };        //    // Data    //        // features        /** Use EntityResolver2. */    protected boolean fUseEntityResolver2 = true;    //    // Constructors    //    /**     * Constructs a DOM parser using the specified parser configuration.     */    public DOMParser(XMLParserConfiguration config) {        super(config);    } // <init>(XMLParserConfiguration)    /**     * Constructs a DOM parser using the dtd/xml schema parser configuration.     */    public DOMParser() {        this(null, null);    } // <init>()    /**     * Constructs a DOM parser using the specified symbol table.     */    public DOMParser(SymbolTable symbolTable) {        this(symbolTable, null);    } // <init>(SymbolTable)    /**     * Constructs a DOM parser using the specified symbol table and     * grammar pool.     */    public DOMParser(SymbolTable symbolTable, XMLGrammarPool grammarPool) {        super((XMLParserConfiguration)ObjectFactory.createObject(            "com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration",            "com.sun.org.apache.xerces.internal.parsers.XIncludeAwareParserConfiguration"            ));        // set properties        fConfiguration.addRecognizedProperties(RECOGNIZED_PROPERTIES);        if (symbolTable != null) {            fConfiguration.setProperty(SYMBOL_TABLE, symbolTable);        }        if (grammarPool != null) {            fConfiguration.setProperty(XMLGRAMMAR_POOL, grammarPool);        }    } // <init>(SymbolTable,XMLGrammarPool)    //    // XMLReader methods    //    /**     * Parses the input source specified by the given system identifier.     * <p>     * This method is equivalent to the following:     * <pre>     *     parse(new InputSource(systemId));     * </pre>     *     * @param systemId The system identifier (URI).     *     * @exception org.xml.sax.SAXException Throws exception on SAX error.     * @exception java.io.IOException Throws exception on i/o error.     */    public void parse(String systemId) throws SAXException, IOException {        // parse document        XMLInputSource source = new XMLInputSource(null, systemId, null);        try {            parse(source);        }        // wrap XNI exceptions as SAX exceptions        catch (XMLParseException e) {            Exception ex = e.getException();            if (ex == null) {                // must be a parser exception; mine it for locator info and throw                // a SAXParseException                LocatorImpl locatorImpl = new LocatorImpl();                locatorImpl.setPublicId(e.getPublicId());                locatorImpl.setSystemId(e.getExpandedSystemId());                locatorImpl.setLineNumber(e.getLineNumber());                locatorImpl.setColumnNumber(e.getColumnNumber());                throw new SAXParseException(e.getMessage(), locatorImpl);            }            if (ex instanceof SAXException) {                // why did we create an XMLParseException?                throw (SAXException)ex;            }            if (ex instanceof IOException) {                throw (IOException)ex;            }            throw new SAXException(ex);        }        catch (XNIException e) {            e.printStackTrace();            Exception ex = e.getException();            if (ex == null) {                throw new SAXException(e.getMessage());            }            if (ex instanceof SAXException) {                throw (SAXException)ex;            }            if (ex instanceof IOException) {                throw (IOException)ex;            }            throw new SAXException(ex);        }    } // parse(String)    /**     * parse     *     * @param inputSource     *     * @exception org.xml.sax.SAXException     * @exception java.io.IOException     */    public void parse(InputSource inputSource)        throws SAXException, IOException {        // parse document        try {            XMLInputSource xmlInputSource =                new XMLInputSource(inputSource.getPublicId(),                                   inputSource.getSystemId(),                                   null);            xmlInputSource.setByteStream(inputSource.getByteStream());            xmlInputSource.setCharacterStream(inputSource.getCharacterStream());            xmlInputSource.setEncoding(inputSource.getEncoding());            parse(xmlInputSource);        }        // wrap XNI exceptions as SAX exceptions        catch (XMLParseException e) {            Exception ex = e.getException();            if (ex == null) {                // must be a parser exception; mine it for locator info and throw                // a SAXParseException                LocatorImpl locatorImpl = new LocatorImpl();                locatorImpl.setPublicId(e.getPublicId());                locatorImpl.setSystemId(e.getExpandedSystemId());                locatorImpl.setLineNumber(e.getLineNumber());                locatorImpl.setColumnNumber(e.getColumnNumber());                throw new SAXParseException(e.getMessage(), locatorImpl);            }            if (ex instanceof SAXException) {                // why did we create an XMLParseException?                throw (SAXException)ex;            }            if (ex instanceof IOException) {                throw (IOException)ex;            }            throw new SAXException(ex);        }        catch (XNIException e) {            Exception ex = e.getException();            if (ex == null) {                throw new SAXException(e.getMessage());            }            if (ex instanceof SAXException) {                throw (SAXException)ex;            }            if (ex instanceof IOException) {                throw (IOException)ex;            }            throw new SAXException(ex);        }    } // parse(InputSource)    /**     * Sets the resolver used to resolve external entities. The EntityResolver     * interface supports resolution of public and system identifiers.     *     * @param resolver The new entity resolver. Passing a null value will     *                 uninstall the currently installed resolver.     */    public void setEntityResolver(EntityResolver resolver) {        try {            XMLEntityResolver xer = (XMLEntityResolver) fConfiguration.getProperty(ENTITY_RESOLVER);            if (fUseEntityResolver2 && resolver instanceof EntityResolver2) {                if (xer instanceof EntityResolver2Wrapper) {                    EntityResolver2Wrapper er2w = (EntityResolver2Wrapper) xer;                    er2w.setEntityResolver((EntityResolver2) resolver);                }                else {                    fConfiguration.setProperty(ENTITY_RESOLVER,                            new EntityResolver2Wrapper((EntityResolver2) resolver));                }            }            else {                if (xer instanceof EntityResolverWrapper) {                    EntityResolverWrapper erw = (EntityResolverWrapper) xer;                    erw.setEntityResolver(resolver);                }                else {                    fConfiguration.setProperty(ENTITY_RESOLVER,                            new EntityResolverWrapper(resolver));                }            }        }        catch (XMLConfigurationException e) {

⌨️ 快捷键说明

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