我想使用RapidXML从XML到C ++阅读。但是,如果节点不存在或缺少值,程序将崩溃。
for (rapidxml::xml_node<> * xmlasset_node = root_node->first_node("Asset"); xmlasset_node; xmlasset_node = xmlasset_node->next_sibling())
{mystring += xmlasset_node->first_attribute("name")->value()};
但是,此“name”属性并不存在于所有节点中,并且如果不是XML,则使用默认值填充。与此类似,我有一些子节点不在所有节点中。原因只是为了使XML尽可能小而且清晰,以便进行手动调整。
如何实现检查/测试(C ++),以防止程序崩溃,如果值/节点不存在则只采用默认值?
亲切的问候, - 科拉克
答案 0 :(得分:0)
以下是我的工作,您可以比较节点及其属性的值是否符合您的条件,然后您接受它: //基本上我正在寻找&#34;设置&#34;节点然后&#34;网络&#34;子节点,然后&#34;端口&#34;属性
if( boost::iequals(doc.first_node()->next_sibling()->name(), "settings"))
{
for (xml_node<> *node = doc.first_node()->next_sibling()->first_node(); node; node = node->next_sibling())
{
// find network tag
if (boost::iequals(node->name(),"network"))
{
for (xml_attribute<> *attr = node->first_attribute(); attr; attr = attr->next_attribute())
{
if ( boost::iequals(attr->name(), "port"))
{
strcpy(attr->value(), portname);
}
}
}
}
}