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