RapidXML - 如何处理丢失的节点/值

时间:2014-05-14 14:53:30

标签: c++ rapidxml

我想使用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 ++),以防止程序崩溃,如果值/节点不存在则只采用默认值?

亲切的问候, - 科拉克

1 个答案:

答案 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);
                        }
                    }
                }
          }
    }