void XercesParser::parseXMLFile(XMLHandler& handler, const String& filename, const String& schemaName, const String& resourceGroup) { XERCES_CPP_NAMESPACE_USE; XercesHandler xercesHandler(handler); // create parser SAX2XMLReader* reader = createReader(xercesHandler); try { // set up schema initialiseSchema(reader, schemaName, filename, resourceGroup); // do parse doParse(reader, filename, resourceGroup); } catch(const XMLException& exc) { if (exc.getCode() != XMLExcepts::NoError) { delete reader; char* excmsg = XMLString::transcode(exc.getMessage()); String message("XercesParser::parseXMLFile - An error occurred at line nr. " + PropertyHelper::uintToString((uint)exc.getSrcLine()) + " while parsing XML file '" + filename + "'. Additional information: "); message += excmsg; XMLString::release(&excmsg); throw FileIOException(message); } } catch(const SAXParseException& exc) { delete reader; char* excmsg = XMLString::transcode(exc.getMessage()); String message("XercesParser::parseXMLFile - An error occurred at line nr. " + PropertyHelper::uintToString((uint)exc.getLineNumber()) + " while parsing XML file '" + filename + "'. Additional information: "); message += excmsg; XMLString::release(&excmsg); throw FileIOException(message); } catch(...) { delete reader; Logger::getSingleton().logEvent("XercesParser::parseXMLFile - An unexpected error occurred while parsing XML file '" + filename + "'.", Errors); throw; } // cleanup delete reader; }
void XercesParser::parseXML(XMLHandler& handler, const RawDataContainer& source, const String& schemaName) { XERCES_CPP_NAMESPACE_USE; XercesHandler xercesHandler(handler); // create parser SAX2XMLReader* reader = createReader(xercesHandler); CEGUI_TRY { // set up schema initialiseSchema(reader, schemaName); // do parse doParse(reader, source); } CEGUI_CATCH(const XMLException& exc) { if (exc.getCode() != XMLExcepts::NoError) { delete reader; char* excmsg = XMLString::transcode(exc.getMessage()); String message("An error occurred at line nr. " + PropertyHelper<uint>::toString((uint)exc.getSrcLine()) + " while parsing XML. Additional information: "); message += excmsg; XMLString::release(&excmsg); CEGUI_THROW(FileIOException(message)); } } CEGUI_CATCH(const SAXParseException& exc) { delete reader; char* excmsg = XMLString::transcode(exc.getMessage()); String message("An error occurred at line nr. " + PropertyHelper<uint>::toString((uint)exc.getLineNumber()) + " while parsing XML. Additional information: "); message += excmsg; XMLString::release(&excmsg); CEGUI_THROW(FileIOException(message)); }