sax2xmlreaderimpl.cpp

来自「IBM的解析xml的工具Xerces的源代码」· C++ 代码 · 共 1,817 行 · 第 1/4 页

CPP
1,817
字号
}void SAX2XMLReaderImpl::startIntSubset(){    // Unused by SAX DTDHandler interface at this time}void SAX2XMLReaderImpl::startExtSubset(){    if (fLexicalHandler)        fLexicalHandler->startEntity(gDTDEntityStr);}void SAX2XMLReaderImpl::TextDecl(   const  XMLCh* const                            , const XMLCh* const){    // Unused by SAX DTDHandler interface at this time}// ---------------------------------------------------------------------------//  SAX2XMLReaderImpl: Handlers for the XMLEntityHandler interface// ---------------------------------------------------------------------------void SAX2XMLReaderImpl::endInputSource(const InputSource&){}bool SAX2XMLReaderImpl::expandSystemId(const XMLCh* const, XMLBuffer&){    return false;}void SAX2XMLReaderImpl::resetEntities(){    // Nothing to do for this one}InputSource* SAX2XMLReaderImpl::resolveEntity(   const   XMLCh* const    publicId                                               , const   XMLCh* const    systemId                                               , const   XMLCh* const){    // Just map to the SAX entity resolver handler    if (fEntityResolver)        return fEntityResolver->resolveEntity(publicId, systemId);    return 0;}InputSource* SAX2XMLReaderImpl::resolveEntity(XMLResourceIdentifier* resourceIdentifier){    //    //  Just map it to the SAX entity resolver. If there is not one installed,    //  return a null pointer to cause the default resolution.    //    if (fEntityResolver)        return fEntityResolver->resolveEntity(resourceIdentifier->getPublicId(),                                                 resourceIdentifier->getSystemId());    if (fXMLEntityResolver)        return fXMLEntityResolver->resolveEntity(resourceIdentifier);    return 0;} void SAX2XMLReaderImpl::startInputSource(const InputSource&){    // Nothing to do for this one}// ---------------------------------------------------------------------------//  SAX2XMLReaderImpl: Overrides of the XMLErrorReporter interface// ---------------------------------------------------------------------------void SAX2XMLReaderImpl::resetErrors(){    if (fErrorHandler)        fErrorHandler->resetErrors();}void SAX2XMLReaderImpl::error(  const   unsigned int                        , const XMLCh* const                        , const XMLErrorReporter::ErrTypes  errType                        , const XMLCh* const                errorText                        , const XMLCh* const                systemId                        , const XMLCh* const                publicId                        , const XMLSSize_t                  lineNum                        , const XMLSSize_t                  colNum){    SAXParseException toThrow = SAXParseException    (        errorText        , publicId        , systemId        , lineNum        , colNum        , fMemoryManager    );    if (!fErrorHandler)    {        if (errType == XMLErrorReporter::ErrType_Fatal)            throw toThrow;        else            return;    }    if (errType == XMLErrorReporter::ErrType_Warning)        fErrorHandler->warning(toThrow);    else if (errType == XMLErrorReporter::ErrType_Fatal)        fErrorHandler->fatalError(toThrow);    else        fErrorHandler->error(toThrow);}// ---------------------------------------------------------------------------//  SAX2XMLReaderImpl: Features and Properties// ---------------------------------------------------------------------------void SAX2XMLReaderImpl::setFeature(const XMLCh* const name, const bool value){    if (fParseInProgress)        throw SAXNotSupportedException("Feature modification is not supported during parse.", fMemoryManager);	    if (XMLString::compareIString(name, XMLUni::fgSAX2CoreNameSpaces) == 0)    {        setDoNamespaces(value);    }    else if (XMLString::compareIString(name, XMLUni::fgSAX2CoreValidation) == 0)    {        fValidation = value;        if (fValidation)            if (fAutoValidation)                setValidationScheme(Val_Auto);            else                setValidationScheme(Val_Always);        else            setValidationScheme(Val_Never);    }    else if (XMLString::compareIString(name, XMLUni::fgSAX2CoreNameSpacePrefixes) == 0)    {        fNamespacePrefix = value;    }    else if (XMLString::compareIString(name, XMLUni::fgXercesDynamic) == 0)    {        fAutoValidation = value;        // for auto validation, the sax2 core validation feature must also be enabled.        if (fValidation)            if (fAutoValidation)                setValidationScheme(Val_Auto);            else                setValidationScheme(Val_Always);        else            setValidationScheme(Val_Never);    }    else if (XMLString::compareIString(name, XMLUni::fgXercesSchema) == 0)    {        setDoSchema(value);    }    else if (XMLString::compareIString(name, XMLUni::fgXercesSchemaFullChecking) == 0)    {        fScanner->setValidationSchemaFullChecking(value);    }    else if (XMLString::compareIString(name, XMLUni::fgXercesIdentityConstraintChecking) == 0)    {        fScanner->setIdentityConstraintChecking(value);    }    else if (XMLString::compareIString(name, XMLUni::fgXercesLoadExternalDTD) == 0)    {        fScanner->setLoadExternalDTD(value);    }    else if (XMLString::compareIString(name, XMLUni::fgXercesContinueAfterFatalError) == 0)    {        fScanner->setExitOnFirstFatal(!value);    }    else if (XMLString::compareIString(name, XMLUni::fgXercesValidationErrorAsFatal) == 0)    {        fScanner->setValidationConstraintFatal(value);    }    else if (XMLString::compareIString(name, XMLUni::fgXercesCacheGrammarFromParse) == 0)    {        fScanner->cacheGrammarFromParse(value);        if (value)            fScanner->useCachedGrammarInParse(value);    }    else if (XMLString::compareIString(name, XMLUni::fgXercesUseCachedGrammarInParse) == 0)    {        if (value || !fScanner->isCachingGrammarFromParse())            fScanner->useCachedGrammarInParse(value);    }    else if (XMLString::compareIString(name, XMLUni::fgXercesCalculateSrcOfs) == 0)    {        fScanner->setCalculateSrcOfs(value);    }    else if (XMLString::compareIString(name, XMLUni::fgXercesStandardUriConformant) == 0)    {        fScanner->setStandardUriConformant(value);    }    else if (XMLString::compareIString(name, XMLUni::fgXercesGenerateSyntheticAnnotations) == 0)    {        fScanner->setGenerateSyntheticAnnotations(value);    }    else if (XMLString::compareIString(name, XMLUni::fgXercesValidateAnnotations) == 0)    {        fScanner->setValidateAnnotations(value);    }    else       throw SAXNotRecognizedException("Unknown Feature", fMemoryManager);}bool SAX2XMLReaderImpl::getFeature(const XMLCh* const name) const{    if (XMLString::compareIString(name, XMLUni::fgSAX2CoreNameSpaces) == 0)        return getDoNamespaces();    else if (XMLString::compareIString(name, XMLUni::fgSAX2CoreValidation) == 0)        return fValidation;    else if (XMLString::compareIString(name, XMLUni::fgSAX2CoreNameSpacePrefixes) == 0)        return fNamespacePrefix;    else if (XMLString::compareIString(name, XMLUni::fgXercesDynamic) == 0)        return fAutoValidation;    else if (XMLString::compareIString(name, XMLUni::fgXercesSchema) == 0)        return getDoSchema();    else if (XMLString::compareIString(name, XMLUni::fgXercesSchemaFullChecking) == 0)        return fScanner->getValidationSchemaFullChecking();    else if (XMLString::compareIString(name, XMLUni::fgXercesIdentityConstraintChecking) == 0)        return fScanner->getIdentityConstraintChecking();    else if (XMLString::compareIString(name, XMLUni::fgXercesLoadExternalDTD) == 0)        return fScanner->getLoadExternalDTD();    else if (XMLString::compareIString(name, XMLUni::fgXercesContinueAfterFatalError) == 0)        return !fScanner->getExitOnFirstFatal();    else if (XMLString::compareIString(name, XMLUni::fgXercesValidationErrorAsFatal) == 0)        return fScanner->getValidationConstraintFatal();    else if (XMLString::compareIString(name, XMLUni::fgXercesCacheGrammarFromParse) == 0)        return fScanner->isCachingGrammarFromParse();    else if (XMLString::compareIString(name, XMLUni::fgXercesUseCachedGrammarInParse) == 0)        return fScanner->isUsingCachedGrammarInParse();    else if (XMLString::compareIString(name, XMLUni::fgXercesCalculateSrcOfs) == 0)        return fScanner->getCalculateSrcOfs();    else if (XMLString::compareIString(name, XMLUni::fgXercesStandardUriConformant) == 0)        return fScanner->getStandardUriConformant();    else if (XMLString::compareIString(name, XMLUni::fgXercesGenerateSyntheticAnnotations) == 0)        return fScanner->getGenerateSyntheticAnnotations();    else if (XMLString::compareIString(name, XMLUni::fgXercesValidateAnnotations) == 0)        return fScanner->getValidateAnnotations();    else       throw SAXNotRecognizedException("Unknown Feature", fMemoryManager);    return false;}void SAX2XMLReaderImpl::setProperty(const XMLCh* const name, void* value){	if (fParseInProgress)		throw SAXNotSupportedException("Property modification is not supported during parse.", fMemoryManager);	if (XMLString::compareIString(name, XMLUni::fgXercesSchemaExternalSchemaLocation) == 0)	{		fScanner->setExternalSchemaLocation((XMLCh*)value);	}	else if (XMLString::compareIString(name, XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation) == 0)	{		fScanner->setExternalNoNamespaceSchemaLocation((XMLCh*)value);	}	else if (XMLString::compareIString(name, XMLUni::fgXercesSecurityManager) == 0)	{		fScanner->setSecurityManager((SecurityManager*)value);	}    else if (XMLString::equals(name, XMLUni::fgXercesScannerName))    {        XMLScanner* tempScanner = XMLScannerResolver::resolveScanner        (            (const XMLCh*) value            , fValidator            , fGrammarResolver            , fMemoryManager        );        if (tempScanner) {            tempScanner->setParseSettings(fScanner);            tempScanner->setURIStringPool(fURIStringPool);            delete fScanner;            fScanner = tempScanner;        }    }    else       throw SAXNotRecognizedException("Unknown Property", fMemoryManager);}void* SAX2XMLReaderImpl::getProperty(const XMLCh* const name) const{    if (XMLString::compareIString(name, XMLUni::fgXercesSchemaExternalSchemaLocation) == 0)        return (void*)fScanner->getExternalSchemaLocation();    else if (XMLString::compareIString(name, XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation) == 0)        return (void*)fScanner->getExternalNoNamespaceSchemaLocation();    else if (XMLString::compareIString(name, XMLUni::fgXercesSecurityManager) == 0)        return (void*)fScanner->getSecurityManager();    else if (XMLString::equals(name, XMLUni::fgXercesScannerName))        return (void*)fScanner->getName();    else        throw SAXNotRecognizedException("Unknown Property", fMemoryManager);    return 0;}// ---------------------------------------------------------------------------//  SAX2XMLReaderImpl: Private getters and setters for conveniences// ---------------------------------------------------------------------------void SAX2XMLReaderImpl::setValidationScheme(const ValSchemes newScheme){    if (newScheme == Val_Never)        fScanner->setValidationScheme(XMLScanner::Val_Never);    else if (newScheme == Val_Always)        fScanner->setValidationScheme(XMLScanner::Val_Always);    else        fScanner->setValidationScheme(XMLScanner::Val_Auto);}void SAX2XMLReaderImpl::setDoNamespaces(const bool newState){    fScanner->setDoNamespaces(newState);}bool SAX2XMLReaderImpl::getDoNamespaces() const{    return fScanner->getDoNamespaces();}void SAX2XMLReaderImpl::setDoSchema(const bool newState){    fScanner->setDoSchema(newState);}bool SAX2XMLReaderImpl::getDoSchema() const{    return fScanner->getDoSchema();}// ---------------------------------------------------------------------------//  SAX2XMLReaderImpl: Grammar preparsing// ---------------------------------------------------------------------------Grammar* SAX2XMLReaderImpl::loadGrammar(const char* const systemId,                                        const short grammarType,                                        const bool toCache){    // Avoid multiple entrance    if (fParseInProgress)        ThrowXMLwithMemMgr(IOException, XMLExcepts::Gen_ParseInProgress, fMemoryManager);    Grammar* grammar = 0;    try    {        fParseInProgress = true;        grammar = fScanner->loadGrammar(systemId, grammarType, toCache);        fParseInProgress = false;    }    catch(const OutOfMemoryException&)    {        throw;    }    catch(...)    {        fParseInProgress = false;        throw;    }    return grammar;}Grammar* SAX2XMLReaderImpl::loadGrammar(const XMLCh* const systemId,                                        const short grammarType,                                        const bool toCache){    // Avoid multiple entrance    if (fParseInProgress)        ThrowXMLwithMemMgr(IOException, XMLExcepts::Gen_ParseInProgress, fMemoryManager);    Grammar* grammar = 0;    try    {        fParseInProgress = true;        grammar = fScanner->loadGrammar(systemId, grammarType, toCache);        fParseInProgress = false;    }    catch(const OutOfMemoryException&)    {        throw;    }    catch(...)    {        fParseInProgress = false;        throw;    }    return grammar;}Grammar* SAX2XMLReaderImpl::loadGrammar(const InputSource& source,                                        const short grammarType,                                        const bool toCache){    // Avoid multiple entrance    if (fParseInProgress)        ThrowXMLwithMemMgr(IOException, XMLExcepts::Gen_ParseInProgress, fMemoryManager);    Grammar* grammar = 0;    try    {        fParseInProgress = true;        grammar = fScanner->loadGrammar(source, grammarType, toCache);        fParseInProgress = false;    }    catch(const OutOfMemoryException&)    {        throw;    }    catch(...)    {        fParseInProgress = false;        throw;    }    return grammar;}void SAX2XMLReaderImpl::resetCachedGrammarPool(){    fGrammarResolver->resetCachedGrammar();}void SAX2XMLReaderImpl::setInputBufferSize(const size_t bufferSize){    fScanner->setInputBufferSize(bufferSize);}Grammar* SAX2XMLReaderImpl::getGrammar(const XMLCh* const nameSpaceKey){    return fGrammarResolver->getGrammar(nameSpaceKey);}XERCES_CPP_NAMESPACE_END

⌨️ 快捷键说明

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