⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlscanner.java

📁 java1.6众多例子参考
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
        } else if (NOTIFY_CHAR_REFS.equals(featureId)) {            return fNotifyCharRefs;        }        throw new XMLConfigurationException(XMLConfigurationException.NOT_RECOGNIZED, featureId);    }        //    // Protected methods    //        // anybody calling this had better have set Symtoltable!    protected void reset() {        init();        // DTD preparsing defaults:        fValidation = true;        fNotifyCharRefs = false;    }        public void reset(PropertyManager propertyManager) {        init();        // Xerces properties        fSymbolTable = (SymbolTable)propertyManager.getProperty(Constants.XERCES_PROPERTY_PREFIX + Constants.SYMBOL_TABLE_PROPERTY);                fErrorReporter = (XMLErrorReporter)propertyManager.getProperty(Constants.XERCES_PROPERTY_PREFIX + Constants.ERROR_REPORTER_PROPERTY);                fEntityManager = (XMLEntityManager)propertyManager.getProperty(ENTITY_MANAGER);        fEntityStore = fEntityManager.getEntityStore() ;        fEntityScanner = (XMLEntityScanner)fEntityManager.getEntityScanner() ;        //fEntityManager.reset();        // DTD preparsing defaults:        fValidation = false;        fNotifyCharRefs = false;            }    // common scanning methods        /**     * Scans an XML or text declaration.     * <p>     * <pre>     * [23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'     * [24] VersionInfo ::= S 'version' Eq (' VersionNum ' | " VersionNum ")     * [80] EncodingDecl ::= S 'encoding' Eq ('"' EncName '"' |  "'" EncName "'" )     * [81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*     * [32] SDDecl ::= S 'standalone' Eq (("'" ('yes' | 'no') "'")     *                 | ('"' ('yes' | 'no') '"'))     *     * [77] TextDecl ::= '<?xml' VersionInfo? EncodingDecl S? '?>'     * </pre>     *     * @param scanningTextDecl True if a text declaration is to     *                         be scanned instead of an XML     *                         declaration.     * @param pseudoAttributeValues An array of size 3 to return the version,     *                         encoding and standalone pseudo attribute values     *                         (in that order).     *     * <strong>Note:</strong> This method uses fString, anything in it     * at the time of calling is lost.     */    protected void scanXMLDeclOrTextDecl(boolean scanningTextDecl,            String[] pseudoAttributeValues)            throws IOException, XNIException {                // pseudo-attribute values        String version = null;        String encoding = null;        String standalone = null;                // scan pseudo-attributes        final int STATE_VERSION = 0;        final int STATE_ENCODING = 1;        final int STATE_STANDALONE = 2;        final int STATE_DONE = 3;        int state = STATE_VERSION;                boolean dataFoundForTarget = false;        boolean sawSpace = fEntityScanner.skipSpaces();        while (fEntityScanner.peekChar() != '?') {            dataFoundForTarget = true;            String name = scanPseudoAttribute(scanningTextDecl, fString);            switch (state) {                case STATE_VERSION: {                    if (name.equals(fVersionSymbol)) {                        if (!sawSpace) {                            reportFatalError(scanningTextDecl                                    ? "SpaceRequiredBeforeVersionInTextDecl"                                    : "SpaceRequiredBeforeVersionInXMLDecl",                                    null);                        }                        version = fString.toString();                        state = STATE_ENCODING;                        if (!versionSupported(version)) {                            reportFatalError("VersionNotSupported",                                    new Object[]{version});                        }                                                if (version.equals("1.1")) {                            Entity.ScannedEntity top = fEntityManager.getTopLevelEntity();                            if (top != null && (top.version == null || top.version.equals("1.0"))) {                                reportFatalError("VersionMismatch", null);                            }                            fEntityManager.setScannerVersion(Constants.XML_VERSION_1_1);                        }                                            } else if (name.equals(fEncodingSymbol)) {                        if (!scanningTextDecl) {                            reportFatalError("VersionInfoRequired", null);                        }                        if (!sawSpace) {                            reportFatalError(scanningTextDecl                                    ? "SpaceRequiredBeforeEncodingInTextDecl"                                    : "SpaceRequiredBeforeEncodingInXMLDecl",                                    null);                        }                        encoding = fString.toString();                        state = scanningTextDecl ? STATE_DONE : STATE_STANDALONE;                    } else {                        if (scanningTextDecl) {                            reportFatalError("EncodingDeclRequired", null);                        } else {                            reportFatalError("VersionInfoRequired", null);                        }                    }                    break;                }                case STATE_ENCODING: {                    if (name.equals(fEncodingSymbol)) {                        if (!sawSpace) {                            reportFatalError(scanningTextDecl                                    ? "SpaceRequiredBeforeEncodingInTextDecl"                                    : "SpaceRequiredBeforeEncodingInXMLDecl",                                    null);                        }                        encoding = fString.toString();                        state = scanningTextDecl ? STATE_DONE : STATE_STANDALONE;                        // TODO: check encoding name; set encoding on                        //       entity scanner                    } else if (!scanningTextDecl && name.equals(fStandaloneSymbol)) {                        if (!sawSpace) {                            reportFatalError("SpaceRequiredBeforeStandalone",                                    null);                        }                        standalone = fString.toString();                        state = STATE_DONE;                        if (!standalone.equals("yes") && !standalone.equals("no")) {                            reportFatalError("SDDeclInvalid", null);                        }                    } else {                        reportFatalError("EncodingDeclRequired", null);                    }                    break;                }                case STATE_STANDALONE: {                    if (name.equals(fStandaloneSymbol)) {                        if (!sawSpace) {                            reportFatalError("SpaceRequiredBeforeStandalone",                                    null);                        }                        standalone = fString.toString();                        state = STATE_DONE;                        if (!standalone.equals("yes") && !standalone.equals("no")) {                            reportFatalError("SDDeclInvalid", null);                        }                    } else {                        reportFatalError("EncodingDeclRequired", null);                    }                    break;                }                default: {                    reportFatalError("NoMorePseudoAttributes", null);                }            }            sawSpace = fEntityScanner.skipSpaces();        }        // REVISIT: should we remove this error reporting?        if (scanningTextDecl && state != STATE_DONE) {            reportFatalError("MorePseudoAttributes", null);        }                // If there is no data in the xml or text decl then we fail to report error        // for version or encoding info above.        if (scanningTextDecl) {            if (!dataFoundForTarget && encoding == null) {                reportFatalError("EncodingDeclRequired", null);            }        } else {            if (!dataFoundForTarget && version == null) {                reportFatalError("VersionInfoRequired", null);            }        }                // end        if (!fEntityScanner.skipChar('?')) {            reportFatalError("XMLDeclUnterminated", null);        }        if (!fEntityScanner.skipChar('>')) {            reportFatalError("XMLDeclUnterminated", null);                    }                // fill in return array        pseudoAttributeValues[0] = version;        pseudoAttributeValues[1] = encoding;        pseudoAttributeValues[2] = standalone;            } // scanXMLDeclOrTextDecl(boolean)        /**     * Scans a pseudo attribute.     *     * @param scanningTextDecl True if scanning this pseudo-attribute for a     *                         TextDecl; false if scanning XMLDecl. This     *                         flag is needed to report the correct type of     *                         error.     * @param value            The string to fill in with the attribute     *                         value.     *     * @return The name of the attribute     *     * <strong>Note:</strong> This method uses fStringBuffer2, anything in it     * at the time of calling is lost.     */    public String scanPseudoAttribute(boolean scanningTextDecl,            XMLString value)            throws IOException, XNIException {                String name = fEntityScanner.scanName();        // XMLEntityManager.print(fEntityManager.getCurrentEntity());                if (name == null) {            reportFatalError("PseudoAttrNameExpected", null);        }        fEntityScanner.skipSpaces();        if (!fEntityScanner.skipChar('=')) {            reportFatalError(scanningTextDecl ? "EqRequiredInTextDecl"                    : "EqRequiredInXMLDecl", new Object[]{name});        }        fEntityScanner.skipSpaces();        int quote = fEntityScanner.peekChar();        if (quote != '\'' && quote != '"') {            reportFatalError(scanningTextDecl ? "QuoteRequiredInTextDecl"                    : "QuoteRequiredInXMLDecl" , new Object[]{name});        }        fEntityScanner.scanChar();        int c = fEntityScanner.scanLiteral(quote, value);        if (c != quote) {            fStringBuffer2.clear();            do {                fStringBuffer2.append(value);                if (c != -1) {                    if (c == '&' || c == '%' || c == '<' || c == ']') {                        fStringBuffer2.append((char)fEntityScanner.scanChar());                    } else if (XMLChar.isHighSurrogate(c)) {                        scanSurrogates(fStringBuffer2);                    } else if (isInvalidLiteral(c)) {                        String key = scanningTextDecl                                ? "InvalidCharInTextDecl" : "InvalidCharInXMLDecl";                        reportFatalError(key,                                new Object[] {Integer.toString(c, 16)});                                fEntityScanner.scanChar();                    }                }                c = fEntityScanner.scanLiteral(quote, value);            } while (c != quote);            fStringBuffer2.append(value);            value.setValues(fStringBuffer2);        }        if (!fEntityScanner.skipChar(quote)) {            reportFatalError(scanningTextDecl ? "CloseQuoteMissingInTextDecl"                    : "CloseQuoteMissingInXMLDecl",                    new Object[]{name});        }                // return        return name;            } // scanPseudoAttribute(XMLString):String        /**     * Scans a processing instruction.     * <p>     * <pre>     * [16] PI ::= '&lt;?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'     * [17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))     * </pre>     */    //CHANGED:    //EARLIER: scanPI()    //NOW: scanPI(XMLStringBuffer)    //it makes things more easy if XMLStringBUffer is passed. Motivation for this change is same    // as that for scanContent()        protected void scanPI(XMLStringBuffer data) throws IOException, XNIException {                // target        fReportEntity = false;        String target = fEntityScanner.scanName();        if (target == null) {            reportFatalError("PITargetRequired", null);        }                // scan data        scanPIData(target, data);        fReportEntity = true;            } // scanPI(XMLStringBuffer)        /**     * Scans a processing data. This is needed to handle the situation     * where a document starts with a processing instruction whose     * target name <em>starts with</em> "xml". (e.g. xmlfoo)     *     * This method would always read the whole data. We have while loop and data is buffered     * until delimeter is encountered.     *     * @param target The PI target     * @param data The string to fill in with the data     */        //CHANGED:    //Earlier:This method uses the fStringBuffer and later buffer values are set to    //the supplied XMLString....    //Now: Changed the signature of this function to pass XMLStringBuffer.. and data would    //be appended to that buffer        protected void scanPIData(String target, XMLStringBuffer data)    throws IOException, XNIException {                // check target        if (target.length() == 3) {            char c0 = Character.toLowerCase(target.charAt(0));            char c1 = Character.toLowerCase(target.charAt(1));            char c2 = Character.toLowerCase(target.charAt(2));            if (c0 == 'x' && c1 == 'm' && c2 == 'l') {                reportFatalError("ReservedPITarget", null);            }        }                // spaces        if (!fEntityScanner.skipSpaces()) {            if (fEntityScanner.skipString("?>")) {                // we found the end, there is no data just return                return;            } else {                // if there is data there should be some space                reportFatalError("SpaceRequiredInPI", null);            }        }                // since scanData appends the parsed data to the buffer passed        // a while loop would append the whole of parsed data to the buffer(data:XMLStringBuffer)        //until all of the data is buffered.        if (fEntityScanner.scanData("?>", data)) {            do {                int c = fEntityScanner.peekChar();                if (c != -1) {                    if (XMLChar.isHighSurrogate(c)) {                        scanSurrogates(data);                    } else if (isInvalidLiteral(c)) {                        reportFatalError("InvalidCharInPI",

⌨️ 快捷键说明

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