2014-10-23 3 views
1

내 응용 프로그램에서 TRY-CATCH를 사용하고 있습니다. 시도가 XML 파일을 읽으려고합니다. 당연히 XML 파일을로드하지 못하면 예외가 발생합니다. 이 외에도 XML 파일의 특정 노드를 찾는 try 문 내부에 IF 문이 있습니다. 존재하지 않는다면, 예외를 해고 할 필요가 있습니다. 이것이 가능한가?무언가가 잘못되었을 때 예외를 발생시키는 방법?

try 
{ 
    XmlDocument xmlDoc = new XmlDocument(); 
    xmlDoc.Load(dialog.FileName); 

    if (xmlDoc.SelectSingleNode("event/text1") == null || 
     xmlDoc.SelectSingleNode("event/text2") == null) 
    { 
     FIRE EXCEPTION 
    } 
} 
catch (Exception err) 
{ 
    MessageBox.Show("Invalid XML file selected:\n" + err.Message); 
} 
+3

[투사] (http://msdn.microsoft.com/en-us/library/1ah5wsex :

나는 코드가 오류 만 최종 보고서에서 오류로 기본값으로 리팩토링 것입니다. aspx) '예외'또는 '예외 새 예외 ("유효하지 않은 XML 노드")와 같은 사용자 정의 예외 : – Habib

+0

사용자 정의 예외에 대해 다른 catch 블록을 정의하여 적절한 메시지를 표시하려는 경우,이 새로운 예외가 catch됩니다 현재'catch' 블록 – Habib

+1

@ 하빕 : 대답 해주세요. 그것은 사소하고 튜토리얼이지만, 그것은'raise '키워드를 알지 못하는 핵심 문제를 둘러싸고 모두가 걸어 다니는 현재 상황과는 달리 직접적인 대답입니다 ... btw. 중복 된 것을 찾으려고했지만 찾을 수 없습니다! 믿을 수 없는. – quetzalcoatl

답변

3

당신은 이러한 XmlException로, 좁은 예외를 캐치하고이 노드없는 경우 다른 예외를 던져해야합니다

try 
{ 
    XmlDocument xmlDoc = new XmlDocument(); 
    xmlDoc.Load(dialog.FileName); 

    if (xmlDoc.SelectSingleNode("event/text1") == null || 
    xmlDoc.SelectSingleNode("event/text2") == null) 
    { 
      throw new InvalidXmlException("Missing event/text node"); 
    } 
} 
catch (XmlException err) 
{ 
    MessageBox.Show("Invalid XML file selected:\n" + err.Message); 
} 

참고, 이것은 당신이 실제로 위해 예외를 던지고있어 가정한다 그것을 스택 위로 올려 놓습니다. 당신이 그걸로 아무 상관이 없다면 던지지 마라.

1

메시지 상자를 보여줄 때 예외를 던져서 왜 잡을 수 있습니까? 메시지 상자를 보여주세요! 당신이 인 경우에

try 
{ 
    XmlDocument xmlDoc = new XmlDocument(); 
    xmlDoc.Load(dialog.FileName); 

    if (xmlDoc.SelectSingleNode("event/text1") == null || 
     xmlDoc.SelectSingleNode("event/text2") == null) 
    { 
     MessageBox.Show("Invalid XML file selected. No text1 or text node found"); 
    } 
} 
catch (Exception err) // catch any other exception 
{ 
    MessageBox.Show("Exception occured:\n" + err.Message); 
} 

예외를 다시 던지거나 (등 로깅) 다른 일반적인 활동을 한 후이 적합 할 수 있습니다,하지만 당신은 제외하고 아무것도하지 않기 때문에 아무 의미가 인상에 없다 여기 하나.

0

예외를 발생시키지 마십시오. 도중에 온 전성 검사를 수행하여 오류 조건을 처리하십시오.

실제 예외는 이고 의도하지 않은 상황은입니다. 두 가지 상황을 알고 있습니다. 왜 그들을 수용하지 않습니까?

bool isXmlValid = false; 

try 
{ 

    if (string.IsnNullOrEmpty(dialog.FileName) == false) 
    { 
     var xmlDoc = new XmlDocument(); 
     xmlDoc.Load(dialog.FileName); 

     if (xmlDoc.SelectSingleNode("event/text1") != null && 
      xmlDoc.SelectSingleNode("event/text2") != null) 
     { 
      // Process accordingly 
      isXmlValid = true; 
     } 
    } 
} 
catch (Exception ex) 
{ 
    Trace.WriteLine(ex.Message); 
} 

if (isXmlValid == false) 
     MessageBox.Show(
     string.Format("Invalid XML file or Xml structure for file ({0})", 
         dialog.FileName)); 
관련 문제