I am trying to set up grammar caching and have things working nicely for XML schemas but not for DTDs. I am effectively doing the following: xercesc::XMLGrammarPool* grammarPool = xercesc::XMLGrammarPoolImpl(xercesc::XMLPlatformUtils::fgMemoryManager);
parser = xercesc::XMLReaderFactory::createXMLReader(xercesc::XMLPlatformUtils::fgMemoryManager, grammarPool)); parser->setFeature(xercesc::XMLUni::fgXercesCacheGrammarFromParse, true); parser->setProperty(xercesc::XMLUni::fgXercesScannerName, static_cast<void*>(const_cast<XMLCh*>(xercesc::XMLUni::fgDGXMLScanner))); parser->setFeature(xercesc::XMLUni::fgSAX2CoreValidation, true); When an XML document with no internal subset is parsed referring to an external DTD: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE library SYSTEM "example.dtd"> <library> ... I get the error: (system id 'example-dtd.xml', line 2, char 40): An exception occurred! Type:NoSuchElementException, Message:The key '{0}' could not be found in the hash table I put some printf()s into my resolveEntity() call back and was interested to see resolveEntity() being called twice. The first time with a null publicId and 'example.dtd' as the systemId, the second time with an empty string for the publicId and 'example.dtd' as the systemId. This error does not occur if I replace the lines parser = xercesc::XMLReaderFactory::createXMLReader(xercesc::XMLPlatformUtils::fgMemoryManager, grammarPool)); parser->setFeature(xercesc::XMLUni::fgXercesCacheGrammarFromParse, true); with parser = xercesc::XMLReaderFactory::createXMLReader(); and therefore do not use grammar caching. When no caching is used, I just get one call to resolveEntity(). As mentioned above, caching is working fine for XML schemas when I use the SGXMLScanner. At one point, I suspected that maybe I needed to call setSystemId() and/or setPublicId() on the InputSource I return from resolveEntity(), and did: buf->setSystemId(p_systemId); buf->setPublicId(NIL); But this didn't help. Is this a known problem? Any suggestions beyond submitting a testcase to jira? Daniel --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]