Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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()};_C++_Rapidxml - Fatal编程技术网

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()};

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()};,c++,rapidxml,C++,Rapidxml,但是,此名称属性并不存在于所有节点中,如果不是在XML中,则将使用默认值填充。与此类似,我在所有节点中都有一些子节点。原因只是为了使XML尽可能小和清晰,以便手动调整 如何实现C++的检查/测试,以防止程序崩溃,如果不存在值/节点,则只接受默认值? 亲切问候,, -Corak我就是这么做的,如果节点及其属性的值符合您的条件,您可以进行比较,然后接受它: //基本上,我在寻找设置节点,然后是网络子节点,然后是端口属性 if( boost::iequals(doc.first_node()-&g

但是,此名称属性并不存在于所有节点中,如果不是在XML中,则将使用默认值填充。与此类似,我在所有节点中都有一些子节点。原因只是为了使XML尽可能小和清晰,以便手动调整

如何实现C++的检查/测试,以防止程序崩溃,如果不存在值/节点,则只接受默认值? 亲切问候,,


-Corak

我就是这么做的,如果节点及其属性的值符合您的条件,您可以进行比较,然后接受它: //基本上,我在寻找设置节点,然后是网络子节点,然后是端口属性

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

谢谢Samer,用你的方法我解决了这个问题!结案:@Corak55不客气……你能接受答案吗:你好,萨默,没问题。我对这里很陌生,所以请道歉:绿色标记这样对吗?亲切的问候-科拉克