I am using "xerces 3.0.1" . My intention is to validate a document against a 
DTD . The DTD is in memory . I used XercesDOMParser::loadGrammar. 

I got the error "no declaration found for MYROOTTAG"

Please find the code snippet below

parseme(char *fileContents,int filesize, char* dtdfileContents,int dtdfilesize)
{
 char Temp[40] ="MY_UNIQUE_ID";
 m_pParser->resetDocumentPool (); 
 m_pParser->cacheGrammarFromParse(true);
 m_pParser->useCachedGrammarInParse(true);
 m_pParser->setIgnoreCachedDTD(false);
 m_pParser->useScanner(XERCES_CPP_NAMESPACE_QUALIFIER XMLUni::fgIGXMLScanner);
 m_pParser->setValidationScheme(XERCES_CPP_NAMESPACE_QUALIFIER 
XercesDOMParser::Val_Always);

 XERCES_CPP_NAMESPACE_QUALIFIER MemBufInputSource  Source((const 
XMLByte*)dtdfileContents,dtdfileSize,"MYROOTTAG",false);
 m_pParser->loadGrammar( Source, XERCES_CPP_NAMESPACE_QUALIFIER 
Grammar::DTDGrammarType,true);
 
 //Set the error handler in m_pParser
 XERCES_CPP_NAMESPACE_QUALIFIER MemBufInputSource Source1((const 
XMLByte*)fileContents,filesize,Temp,false);  
 m_pParser->parse( Source1);
 //return based on error handlers value
}

I used a schema  ( set the required parametrs for schema and called setdoSchema 
and setDoNameSpace.) Validation was successful.
Should I do something else to use a cached DTD ?
Thanks,
Mini


      

Reply via email to