3
如果XML文件无效,RapidXml将引发异常。是否有可能从这样的失败中恢复过来?如何处理RapidXml错误?
例如,是否可以预先检查XML是否有效,或恢复并继续?
看来,当这样的失败发生时,只有过程的断言和退出,并且没有恢复的机会。
如果XML文件无效,RapidXml将引发异常。是否有可能从这样的失败中恢复过来?如何处理RapidXml错误?
例如,是否可以预先检查XML是否有效,或恢复并继续?
看来,当这样的失败发生时,只有过程的断言和退出,并且没有恢复的机会。
默认情况下,RapidXML在解析错误时引发异常;它不会断言(也许通过断言你只是意味着流程中止)。
它可以与your own error handler called rapidxml::parse_error_handler
配置RapidXML如果#define RAPIDXML_NO_EXCEPTIONS
包括RapidXML头前,如果这样的错误处理程序返回,RapidXML会调用assert(0)
,但我怀疑你没有这种不启用,你只需要捕捉正确的例外。
捕捉解析错误只有一个例外,它被称为rapidxml::parse_error
,但如果RapidXML找不到文件,它也会抛出std::runtime_error
。
下面是这两个捕获的异常类型的例子,再加上一些包罗万象的处理程序:
#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;
}
}