【发布时间】:2014-07-11 14:00:57
【问题描述】:
我正在使用 RapidXML 解析一个 xml 文件,其中包含一些我想在我的 C++ 程序中使用的变量。我能够读取有效节点,但如果节点名称拼写错误,我想添加一些错误处理。
这是我的文件的一个工作示例。
.cpp
try
{
rapidxml::file<> xmlFile("file.xml");
rapidxml::xml_document<> doc;
doc.parse<parse_declaration_node | parse_no_data_nodes>(xmlFile.data());
xml_node<>* prop_node = doc.first_node("PropertyList");
}
catch (const runtime_error& e)
{
// Do something
}
catch (const rapidxml::parse_error& e)
{
// Do something
}
catch (const exception& e)
{
// Do something
}
catch(...)
{
// Do something
}
.xml
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
...
</PropertyList>
如果我将 .cpp 文件中的 first_node() 调用更改为不存在的节点,如下所示:
xml_node<>* prop_node = doc.first_node("Property");
程序在运行时崩溃,抱怨内存访问不正确,而不是抛出异常。
这是 RapidXML 应该工作的方式还是我做错了什么?
谢谢!
【问题讨论】:
标签: c++ xml exception-handling rapidxml