[英]RapidXML node exception handling
我正在使用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應該工作的方式還是我做錯了什么?
謝謝!
我對RapidXML並不完全熟悉,但是我從它的參考頁中發現了有關first_node的以下內容。 http://rapidxml.sourceforge.net/manual.html#namespacerapidxml_1what_is_rapidxml
函數xml_node :: first_node
概要
xml_node * first_node(const Ch * name = 0,std :: size_t name_size = 0,bool case_sensitive = true)const; 描述
獲取第一個子節點,可以選擇匹配節點名稱。 參數
name要查找的子項的名稱,或0而不管其第一個子項的名稱; 如果name_size不為零,則此字符串不必以零結尾。name_size名稱的大小(以字符為單位),或者為0即可從字符串case_sensitive自動計算大小。名稱比較應該區分大小寫; 不區分大小寫的比較僅適用於ASCII字符
指向找到的孩子的指針;如果找不到,則為0。
因此,您可以調用first_node而不需要指定其名稱。(盡管這可能不是您問題的直接答案。)
或檢查doc.first_node(“ Property”)的返回值是否為0。如果返回值不為0,則僅將值分配給prop_node。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.