2012-02-01 3 views
6

XML 데이터가 포함 된 문자열을 반환하는 함수를 호출하고 있습니다. 이 함수의 작동 방식은 중요하지 않지만 결과 XML은 함수의 성공 여부에 따라 달라질 수 있습니다.예상되는 구조의 XML 확인

기본적으로이 함수는 expect XML 또는 오류 형식의 XML을 반환합니다. 오류에

<SpecificResult> 
    <Something>data</Something> 
</SpecificResult> 

:

<ErrorResult> 
    <ErrorCode>1</ErrorCode> 
    <ErrorMessage>An Error</ErrorMessage> 
</ErrorResult> 

내 시스템이 설정하는 방법 내가 할 수있는 것입니다 다음은이 개 결과가 어떻게 보이는지의 기본 샘플 ...

성공에

은 간단한 변환 함수를 사용하여 xml 문자열을 클래스로 변환하지만 클래스 유형을 알기 위해서는 my가 필요합니다. 성공하면 SpecificResult이고 변환 할 수 있음을 알게 될 것입니다. 하지만 오류가 발생했는지 먼저 확인하고 싶습니다. 이상적인 최종 결과이 비슷한을 허용 할

...

string xml = GetXML(); 
if(!IsError(xml)) 
{ 
    //convert to known type and process 
} 

그래서 질문의 IsError 기능을 구현하는 가장 좋은 방법은 무엇입니까?

I 옵션의 몇 가지 생각하지만 난 정말 그들 중 하나를 좋아하는 경우에 확실하지 않은 ... XML 문자열이 ErrorResult 클래스에 XML을 변환하고 확인하는 "<ErrorResult>"

  • 시도를 포함
    1. 선택하면

      트리를 구문 분석하고 GetXml() 방법 때문에 ErrorResult 노드
  • 답변

    5

    를 검색하는 기능을 내장 실패

  • 사용하여 XDocument 또는 유사한 본질적으로 RET입니다 urning 이 지정되지 않은 데이터와 여기에 유일한 안전한 가정은, XML으로 XML로 구문 분석하는 것 실제 유형을 주장하는 가장 안전한 방법은 구조화 된 것 이다 :

    private bool IsError(string xml) 
    { 
        var document = XDocument.Parse(xml); 
        return document.Element("ErrorResult") != null; 
    } 
    
  • +0

    덕분에이 나에게 충분히 고체 보인다. msdn이 문서에서 명확하지 않은지 확인하기 위해 실패한'Parse' 시도는 여전히 XDocument (빈 상태 임에도 불구하고)를 반환 할 것입니까? ... 또한, 허용 된 대답을 기다리고 다른 사용자가 입력을 볼 때까지 기다립니다.) – musefan

    +1

    [XDocument.Parse (string)] (http://msdn.microsoft.com/en-us/library/system. xml.linq.xdocument.parse.aspx)는 실제로 [잘못된 XML을 발견하면 XmlException을 throw합니다] (http://msdn.microsoft.com/en-us/library/bb387040.aspx). 그러나,이 경우 정말 예외적 인 것처럼 보입니다. 그래서 IsError (string) 메쏘드에서 처리하고 싶지는 않을 것입니다. 예외를 호출 체인에서 더 많이 전달할 수있게하십시오. –