簡體   English   中英

RapidXML節點異常處理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM