xincludehandler.java

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

JAVA
1,684
字号
                    fXInclude11TextReader.setBufferSize(fBufferSize);                }            }            return;        }    } // setProperty(String,Object)    /**     * Returns the default state for a feature, or null if this     * component does not want to report a default value for this     * feature.     *     * @param featureId The feature identifier.     *     * @since Xerces 2.2.0     */    public Boolean getFeatureDefault(String featureId) {        for (int i = 0; i < RECOGNIZED_FEATURES.length; i++) {            if (RECOGNIZED_FEATURES[i].equals(featureId)) {                return FEATURE_DEFAULTS[i];            }        }        return null;    } // getFeatureDefault(String):Boolean    /**     * Returns the default state for a property, or null if this     * component does not want to report a default value for this     * property.     *     * @param propertyId The property identifier.     *     * @since Xerces 2.2.0     */    public Object getPropertyDefault(String propertyId) {        for (int i = 0; i < RECOGNIZED_PROPERTIES.length; i++) {            if (RECOGNIZED_PROPERTIES[i].equals(propertyId)) {                return PROPERTY_DEFAULTS[i];            }        }        return null;    } // getPropertyDefault(String):Object    public void setDocumentHandler(XMLDocumentHandler handler) {        fDocumentHandler = handler;    }    public XMLDocumentHandler getDocumentHandler() {        return fDocumentHandler;    }    // XMLDocumentHandler methods    /**     * Event sent at the start of the document.     *     * A fatal error will occur here, if it is detected that this document has been processed     * before.     *     * This event is only passed on to the document handler if this is the root document.     */    public void startDocument(        XMLLocator locator,        String encoding,        NamespaceContext namespaceContext,        Augmentations augs)        throws XNIException {        // we do this to ensure that the proper location is reported in errors        // otherwise, the locator from the root document would always be used        fErrorReporter.setDocumentLocator(locator);        if (!isRootDocument()            && fParentXIncludeHandler.searchForRecursiveIncludes(locator)) {            reportFatalError(                "RecursiveInclude",                new Object[] { locator.getExpandedSystemId()});        }        if (!(namespaceContext instanceof XIncludeNamespaceSupport)) {            reportFatalError("IncompatibleNamespaceContext");        }        fNamespaceContext = (XIncludeNamespaceSupport)namespaceContext;        fDocLocation = locator;        // initialize the current base URI        fCurrentBaseURI.setBaseSystemId(locator.getBaseSystemId());        fCurrentBaseURI.setExpandedSystemId(locator.getExpandedSystemId());        fCurrentBaseURI.setLiteralSystemId(locator.getLiteralSystemId());        saveBaseURI();        if (augs == null) {            augs = new AugmentationsImpl();        }        augs.putItem(CURRENT_BASE_URI, fCurrentBaseURI);                // initialize the current language        fCurrentLanguage = XMLSymbols.EMPTY_STRING;        saveLanguage(fCurrentLanguage);        if (isRootDocument() && fDocumentHandler != null) {            fDocumentHandler.startDocument(                locator,                encoding,                namespaceContext,                augs);        }    }    public void xmlDecl(        String version,        String encoding,        String standalone,        Augmentations augs)        throws XNIException {        fIsXML11 = "1.1".equals(version);        if (isRootDocument() && fDocumentHandler != null) {            fDocumentHandler.xmlDecl(version, encoding, standalone, augs);        }    }    public void doctypeDecl(        String rootElement,        String publicId,        String systemId,        Augmentations augs)        throws XNIException {        if (isRootDocument() && fDocumentHandler != null) {            fDocumentHandler.doctypeDecl(rootElement, publicId, systemId, augs);        }    }    public void comment(XMLString text, Augmentations augs)        throws XNIException {        if (!fInDTD) {            if (fDocumentHandler != null                && getState() == STATE_NORMAL_PROCESSING) {                fDepth++;                augs = modifyAugmentations(augs);                fDocumentHandler.comment(text, augs);                fDepth--;            }        }        else if (fDTDHandler != null) {            fDTDHandler.comment(text, augs);        }    }    public void processingInstruction(        String target,        XMLString data,        Augmentations augs)        throws XNIException {        if (!fInDTD) {            if (fDocumentHandler != null                && getState() == STATE_NORMAL_PROCESSING) {                // we need to change the depth like this so that modifyAugmentations() works                fDepth++;                augs = modifyAugmentations(augs);                fDocumentHandler.processingInstruction(target, data, augs);                fDepth--;            }        }        else if (fDTDHandler != null) {            fDTDHandler.processingInstruction(target, data, augs);        }    }    public void startElement(        QName element,        XMLAttributes attributes,        Augmentations augs)        throws XNIException {        fDepth++;        int lastState = getState(fDepth - 1);        // If the last two states were fallback then this must be a descendant of an include        // child which isn't a fallback. The specification says we should ignore such elements        // and their children.        if (lastState == STATE_EXPECT_FALLBACK && getState(fDepth - 2) == STATE_EXPECT_FALLBACK) {            setState(STATE_IGNORE);        }        else {            setState(lastState);        }        // we process the xml:base and xml:lang attributes regardless        // of what type of element it is.        processXMLBaseAttributes(attributes);        if (fFixupLanguage) {            processXMLLangAttributes(attributes);        }        if (isIncludeElement(element)) {            boolean success = this.handleIncludeElement(attributes);            if (success) {                setState(STATE_IGNORE);            }            else {                setState(STATE_EXPECT_FALLBACK);            }        }        else if (isFallbackElement(element)) {            this.handleFallbackElement();        }        else if (hasXIncludeNamespace(element)) {            if (getSawInclude(fDepth - 1)) {                reportFatalError(                    "IncludeChild",                    new Object[] { element.rawname });            }            if (getSawFallback(fDepth - 1)) {                reportFatalError(                    "FallbackChild",                    new Object[] { element.rawname });            }            if (getState() == STATE_NORMAL_PROCESSING) {                if (fResultDepth++ == 0) {                    checkMultipleRootElements();                }                if (fDocumentHandler != null) {                    augs = modifyAugmentations(augs);                    attributes = processAttributes(attributes);                    fDocumentHandler.startElement(element, attributes, augs);                }                        }        }        else if (getState() == STATE_NORMAL_PROCESSING) {            if (fResultDepth++ == 0) {                checkMultipleRootElements();            }            if (fDocumentHandler != null) {                augs = modifyAugmentations(augs);                attributes = processAttributes(attributes);                fDocumentHandler.startElement(element, attributes, augs);            }                    }    }    public void emptyElement(        QName element,        XMLAttributes attributes,        Augmentations augs)        throws XNIException {        fDepth++;        int lastState = getState(fDepth - 1);        // If the last two states were fallback then this must be a descendant of an include        // child which isn't a fallback. The specification says we should ignore such elements        // and their children.        if (lastState == STATE_EXPECT_FALLBACK && getState(fDepth - 2) == STATE_EXPECT_FALLBACK) {            setState(STATE_IGNORE);        }        else {            setState(lastState);        }        // we process the xml:base and xml:lang attributes regardless        // of what type of element it is.        processXMLBaseAttributes(attributes);        if (fFixupLanguage) {            processXMLLangAttributes(attributes);        }        if (isIncludeElement(element)) {            boolean success = this.handleIncludeElement(attributes);            if (success) {                setState(STATE_IGNORE);            }            else {                reportFatalError("NoFallback");            }        }        else if (isFallbackElement(element)) {            this.handleFallbackElement();        }        else if (hasXIncludeNamespace(element)) {            if (getSawInclude(fDepth - 1)) {                reportFatalError(                    "IncludeChild",                    new Object[] { element.rawname });            }            if (getSawFallback(fDepth - 1)) {                reportFatalError(                    "FallbackChild",                    new Object[] { element.rawname });            }            if (getState() == STATE_NORMAL_PROCESSING) {                if (fResultDepth == 0) {                    checkMultipleRootElements();                }                if (fDocumentHandler != null) {                    augs = modifyAugmentations(augs);                    attributes = processAttributes(attributes);                    fDocumentHandler.emptyElement(element, attributes, augs);                }            }        }        else if (getState() == STATE_NORMAL_PROCESSING) {            if (fResultDepth == 0) {                checkMultipleRootElements();            }            if (fDocumentHandler != null) {                augs = modifyAugmentations(augs);                attributes = processAttributes(attributes);                fDocumentHandler.emptyElement(element, attributes, augs);            }        }        // reset the out of scope stack elements        setSawFallback(fDepth + 1, false);        setSawInclude(fDepth, false);        // check if an xml:base has gone out of scope        if (fBaseURIScope.size() > 0 && fDepth == fBaseURIScope.peek()) {            // pop the values from the stack            restoreBaseURI();        }        fDepth--;    }    public void endElement(QName element, Augmentations augs)        throws XNIException {        if (isIncludeElement(element)) {            // if we're ending an include element, and we were expecting a fallback            // we check to see if the children of this include element contained a fallback            if (getState() == STATE_EXPECT_FALLBACK                && !getSawFallback(fDepth + 1)) {                reportFatalError("NoFallback");            }        }        if (isFallbackElement(element)) {            // the state would have been set to normal processing if we were expecting the fallback element            // now that we're done processing it, we should ignore all the other children of the include element            if (getState() == STATE_NORMAL_PROCESSING) {                setState(STATE_IGNORE);            }        }        else if (getState() == STATE_NORMAL_PROCESSING) {

⌨️ 快捷键说明

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