By default, RapidXML raises exceptions on parse errors; it doesn't assert (perhaps by assert you just meant the process aborts).
It is possible to configure RapidXML with your own error handler called rapidxml::parse_error_handler
if you #define RAPIDXML_NO_EXCEPTIONS
before including the RapidXML headers, and if such an error handler returns, RapidXML will call assert(0)
, but I suspect that you don't have that enabled and you just need to be catching the right exception.
There's just one exception to catch for parse errors, and it's called rapidxml::parse_error
, but RapidXML will also throw std::runtime_error
if it fails to find the file.
Here's an example which catches both exception types, plus some catch-all handlers:
#include <iostream>
#include "rapidxml.hpp"
#include "rapidxml_utils.hpp"
int main()
{
try
{
rapidxml::file<> xmlFile("test.xml");
rapidxml::xml_document<> doc;
doc.parse<0>(xmlFile.data());
}
catch (const std::runtime_error& e)
{
std::cerr << "Runtime error was: " << e.what() << std::endl;
}
catch (const rapidxml::parse_error& e)
{
std::cerr << "Parse error was: " << e.what() << std::endl;
}
catch (const std::exception& e)
{
std::cerr << "Error was: " << e.what() << std::endl;
}
catch (...)
{
std::cerr << "An unknown error occurred." << std::endl;
}
}