저는 C++ 프로그램에서 사용하고 싶은 일부 변수를 포함하고있는 XML 파일을 분석하기 위해 RapidXML을 사용하고 있습니다. 나는 유효한 노드를 읽으려고 애를 먹었지 만 노드 이름의 철자가 틀린 경우 오류 처리를 추가하고 싶습니다.RapidXML 노드 예외 처리
다음은 내 파일의 작동 예제입니다.
통화 당
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");
예외를 throw하는 대신 잘못된 메모리 액세스에 대해 불평하는 런타임에 프로그램이 충돌했습니다.
RapidXML이 작동하는 방식입니까, 아니면 제가 잘못 했나요?
감사합니다.
답장을 보내 주셔서 감사합니다. 내가 first_node()의 응답이 0인지 아닌지 먼저 확인하여 작업을 시작하도록했습니다. 잘 작동하는 것 같습니다! – nbon