Hi all, I am trying to redirect validation to external DTD ot XSD file depends on the input. In case of schema parser still expects DTD. What am I doing wrong in the following code?
//////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////// HRESULT XMLValidator::Valid(const LPCTSTR xmlFileName, const LPCTSTR validationFileName) { SAXParser* parser = new SAXParser; HRESULT hr = S_OK; CString val = validationFileName; val.TrimLeft(); val.TrimRight(); RedirectHandler handler(validationFileName); parser->setDocumentHandler(&handler); parser->setErrorHandler(&handler); if( val.IsEmpty() ) { parser->setLoadExternalDTD(false); parser->setValidationScheme(SAXParser::Val_Auto); parser->setDoSchema(false); parser->setValidationSchemaFullChecking(false); } else if ( val.Mid(val.ReverseFind('.')+1).CompareNoCase("DTD") == 0 ) { parser->setEntityResolver(&handler); parser->setLoadExternalDTD(true); parser->setDoSchema(false); parser->setValidationSchemaFullChecking(false); } else if ( val.Mid(val.ReverseFind('.')+1).CompareNoCase("XSD") == 0 ) { parser->setEntityResolver(&handler); parser->setLoadExternalDTD(false); parser->setDoSchema(true); parser->setValidationScheme(SAXParser::Val_Always); parser->setValidationSchemaFullChecking(true); } int errorCount = 0; try { parser->parse(xmlFileName); errorCount = parser->getErrorCount(); } catch (const XMLException& e) { CString error; error.Format("\nError during parsing: '%s'\nException message is: '%s'\n", xmlFileName, StrX(e.getMessage()) ); m_szError += error; hr = E_FAIL; } if (errorCount) { hr = E_FAIL; } if( FAILED( hr ) ) m_szError += handler.GetError(); delete parser; return hr; } ////////////////////////////////////////// // ----------------------------------------------------------------------- // Handlers for the SAX EntityResolver interface // ----------------------------------------------------------------------- InputSource* RedirectHandler::resolveEntity(const XMLCh* const publicId , const XMLCh* const systemId) { InputSource* is = NULL; if( !m_szValidationFile.IsEmpty() ) { XMLCh* text = XMLString::transcode((LPCTSTR)m_szValidationFile); is = new LocalFileInputSource(text); delete [] text; text = NULL; } return is; } /////////////////////////////////////////////////// Thanks, Igor Shtilkind Software Engineer --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]