2016-10-17 1 views
1

데이터가 포함되어 있지 않은 빈 파일을 처리하고 싶습니다 아래 코드를 실행 한 후 루트 요소가 누락되어 오류가 발생했습니다.xDocument를 확인하는 방법은 C#에서

xDoc이 null 또는 비어 있음을 어떻게 확인할 수 있습니까?

string path = @"E:\Test.xml"; 
XDocument xDoc = XDocument.Load(path); 
+2

하면이 시도 : http://stackoverflow.com/questions/375590/how-does-one-test-a-file-to-see-if-its-a-valid-xml-file-before -loading-it-with- – YuvShap

+0

경로가 이미 존재하지만 파일이 비어 있습니다. 시도 잡기를 사용할 수 있지만 특정 XDocument가 null이거나 비어 있는지 확인하는 다른 방법이 필요합니다. –

+0

시도 잡기 블록이 문제에 응답하지 않는 이유를 이해하지 못했습니다. , 당신이 원하는 결과를 설명 할 수 있습니까? – YuvShap

답변

1

XDocument.Load는 유효한 XML 파일을 필요로합니다. 그렇지 않으면 예외가 발생합니다. XDocument.Load를 호출하기 전에 파일이 존재하는지 또는 비어 있는지 확인할 수 있습니다 (예 :

if (new System.IO.FileInfo(path).Length > 0) 
{ 
    ... 
} 

또는 예외를 포착 할 수 있습니다.

string path = @"E:\Test.xml"; 
try 
{ 
    XDocument xDoc = XDocument.Load(path); 
} catch(Exception) { 
    // some problem 
} 

이 코드를 정적 함수에 넣으면 코드를 읽기 쉽습니다.

var xDoc = MyXDocument.Load(path); 
if (xDoc != null) 
{ .... 
} 

public class MyXDocument { 
    public static XDocument Load(string path) { 
     try 
     { 
      XDocument xDoc = XDocument.Load(path); 
      return xDoc; 
     } catch(Exception) { 
      return null; 
     } 
    } 
} 
+0

이처럼 처리 할 수 ​​있지만 XDocument가 null 또는 비어 있는지 확인할 수있는 다른 방법이 필요합니다. –

+0

@yashfale -이 종류의 검사가 요구 사항과 일치하지 않는 이유는 무엇입니까? 스타일 문제라면로드하는 동안 오류가 발생하면 null을 반환하는 MyXDocument.Load()와 같은 정적 도우미 메서드를 작성할 수 있습니다. –

+0

! try catch 블록을 사용해야합니다. XDocument에 대해 null 또는 비어 있음을 확인하는 다른 방법은 없습니다. 감사. –

관련 문제