2014-05-14 4 views
1

RapidXML을 사용하여 XML에서 C++로 읽는 것이 좋습니다. 그러나 노드가 존재하지 않거나 값이 누락되면 프로그램이 충돌합니다.RapidXML - 누락 된 노드/값을 처리하는 방법

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++)?

종류와 관련, - Corak은

여기

답변

0

하여 노드의 값과 그 속성은 당신이 그것을 받아 다음 기준에 일치하는 경우 내가 무엇을, 당신은 비교할 수있다 : 를 // 기본적으로 나는 "찾고 있어요 설정 "노드 다음에"네트워크 "하위 노드,"포트 "속성

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

당신의 접근 방식에 감사드립니다. 문제를 해결했습니다! 케이스가 닫혔습니다. – Corak55

+0

@ Corak55 you.re welcome ... 대답을 받아 들일 수 있습니까 :) – Samer

+0

안녕 사머, 확실한 것. 나는 여기에 아주 새로운, 그래서 사과하시기 바랍니다 :) 그 방법 (녹색 표시) 올바른가요? 종류는 - Corak – Corak55

관련 문제