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