bool VART::XmlBase::ParseFile(const std::string& fileName) { static XercesDOMParser::ValSchemes ValScheme = XercesDOMParser::Val_Auto; //Val_Never Val_Always bool bDoNamespaces = false; bool bDoSchema = false; bool bSchemaFullChecking = false; bool bDoCreate = false; ErrorHandler* errorHPtr; try { XMLPlatformUtils::Initialize(); } catch(const XMLException &toCatch) { cerr << "Error during Xerces-c Initialization.\n" << " Exception message:" << TempCString(toCatch.getMessage()) << endl; return false; } if (parserPtr) delete parserPtr; parserPtr = new XercesDOMParser; parserPtr->setValidationScheme(ValScheme); parserPtr->setDoNamespaces(bDoNamespaces); parserPtr->setDoSchema(bDoSchema); parserPtr->setValidationSchemaFullChecking(bSchemaFullChecking); parserPtr->setCreateEntityReferenceNodes(bDoCreate); // Create the error handler and install it errorHPtr = new ErrorHandler; parserPtr->setErrorHandler(errorHPtr); // Parse the XML file, catching any XML exceptions that might propogate // out of it. try { parserPtr->parse(fileName.c_str()); } catch (const OutOfMemoryException&) { cerr << "OutOfMemoryException" << endl; delete errorHPtr; return false; } catch (const XMLException& e) { cerr << "An error occurred during parsing\n Message: " << TempCString(e.getMessage()) << endl; delete errorHPtr; return false; } catch (const DOMException& e) { const unsigned int maxChars = 2047; XMLCh errText[maxChars + 1]; cerr << "\nDOM Error during parsing: '" << fileName << "'\n" << "DOMException code is: " << e.code << endl; if (DOMImplementation::loadDOMExceptionMsg(e.code, errText, maxChars)) cerr << "Message is: " << TempCString(errText) << endl; delete errorHPtr; return false; } catch (...) { cerr << "An error occurred during parsing\n " << endl; delete errorHPtr; return false; } if (errorHPtr->getSawErrors()) { // Clean up the error handler. The parser does not adopt handlers // since they could be many objects or one object installed for multiple // handlers. delete errorHPtr; return false; } else { //...clean up the error handler. The parser does not adopt handlers // since they could be many objects or one object installed for multiple // handlers. delete errorHPtr; // Since parsing was sucessful, intialize the document pointer, i.e.: // extract the DOM tree, get the list of all the elements. documentPtr = parserPtr->getDocument(); return true; } }