2012-02-01 9 views
6

XMLデータを含む文字列を返す関数を呼び出しています。この関数の動作の仕方は重要ではありませんが、結果のxmlは関数の成功によって異なります。予想される構造のXMLを確認する

基本的に、関数はexpect XMLまたはエラー形式のXMLを返します。私のシステムが設定されている方法は、私ができることである

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

:エラー時に

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

:下の2つの結果は、成功する

...どのように見えるかの基本的なサンプルです単純な変換関数を使ってxml文字列をクラスに変換しますが、これはmyがクラスの型を知ることを必要とします。成功すれば、私はそれがSpecificResultであることを知り、変換することができます。しかし、エラーが発生したかどうか最初に確認したい。理想的な最終結果はこれと似たようなことが可能になる

...

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

そこで問題は、IsError機能を実装するための最良の方法は何ですか?

XML文字列が "<ErrorResult>"
  • ErrorResultクラスにXMLを変換しようとするためにチェックが含まれている場合、私は確信して私は本当にそれらのいずれかが好きなら...

    1. チェックオプションのカップルを考えなくてい

      GetXml()方法は本質的に、RETあるためツリーを解析しErrorResultノード

  • 答えて

    5

    を検索する機能に内蔵

  • 使用XDocumentまたは同様のフェイル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をスローする](http://msdn.microsoft.com/en-us/library/bb387040.aspx)を参照してください。しかし、このケースでは本当に例外的な条件のように思えるので、 'IsError(string)'メソッドでそれを処理するのではなく、例外がコールチェーン内でさらに伝播するようにすることができます。 –

    関連する問題