XMLParser::XMLParser() { using namespace xercesc; namespace xml = xsd::cxx::xml; namespace tree = xsd::cxx::tree; _memMgr = new MemoryManagerImpl(); _grammarPool = new XMLGrammarPoolImpl(_memMgr); const XMLCh ls_id [] = {chLatin_L, chLatin_S, chNull}; // Get an implementation of the Load-Store (LS) interface. // DOMImplementation* impl ( DOMImplementationRegistry::getDOMImplementation (ls_id)); // Create a DOMBuilder. // // TODO: make this a class-member and initialize just once parser = impl->createDOMBuilder(DOMImplementationLS::MODE_SYNCHRONOUS, 0, _memMgr, _grammarPool); // Discard comment nodes in the document. // parser->setFeature (XMLUni::fgDOMComments, false); // Enable datatype normalization. // parser->setFeature (XMLUni::fgDOMDatatypeNormalization, true); // Do not create EntityReference nodes in the DOM tree. No // EntityReference nodes will be created, only the nodes // corresponding to their fully expanded substitution text // will be created. // //parser->setFeature (XMLUni::fgDOMEntities, false); parser->setFeature (XMLUni::fgDOMEntities, true); // Perform Namespace processing. // parser->setFeature (XMLUni::fgDOMNamespaces, true); // Do not include ignorable whitespace in the DOM tree. // parser->setFeature (XMLUni::fgDOMWhitespaceInElementContent, false); parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); // We will release the DOM document ourselves. // parser->setFeature (XMLUni::fgXercesUserAdoptsDOMDocument, true); // Enable grammar caching and load known grammars parser->loadGrammar((INSTALL_PREFIX + std::string("/etc/xbe/schema/xbe-msg.xsd")).c_str(), Grammar::SchemaGrammarType, true); parser->loadGrammar((INSTALL_PREFIX + std::string("/etc/xbe/schema/dsig.xsd")).c_str(), Grammar::SchemaGrammarType, true); parser->setFeature(XMLUni::fgXercesUseCachedGrammarInParse, true); }