2010-12-06 11 views
1

私が持っているものは、質問のリストを表すWebサービスから受け取るXMLです。質問はウェブ上にどのように表示されるべきかを示すタイプ別に分解されています。たとえば、存在するかもしれないXMLのサブ要素のリストを選択する

<step id="109025"> 
    <stepinf enabled="Yes" errors="0" id="First Name" mandatory="Yes" name="sti_115511" type="FIL"> 
    <field_label>First Name</field_label> 
    <screen_value></screen_value> 
    </stepinf> 
    <stepinf enabled="Yes" errors="0" id="Last Name" mandatory="Yes" name="sti_115513" type="FIL"> 
    <field_label>Last Name</field_label> 
    <screen_value></screen_value> 
    </stepinf> 
    <stepinf enabled="Yes" errors="0" id="State" mandatory="Yes" name="sti_109257" type="STE"> 
    <field_label>State</field_label> 
    <screen_value></screen_value> 
    <options_list> 
     <option label="AK">AK - Alaska</option> 
     <option label="AL">AL - Alabama</option> 
     <option label="AR">AR - Arkansas</option> 
     <option label="AS">AS - American Samoa (Terr.)</option> 
     <option label="AZ">AZ - Arizona</option> 
     ... 
    </options_list> 
    </stepinf> 
</step> 

タイプ「STE」は、選択ボックスとしてWeb上に表示されることを示します。

私は、私は次のようにして作成されたカスタムタイプの>リスト<を移入しています:

私は私が私の中にオプションのサブ要素を取得する方法が分からないATが迷子になっています
var stepinfList = (from stepinf in xdoc.Descendants("stepinf") 
    select new Question 
    { 
     TextID = stepinf.Attribute("id").Value, 
     Type = stepinf.Attribute("type").Value, 
     Name = stepinf.Attribute("name").Value, 
     Label = stepinf.Element("field_label").Value, 
     Required = stepinf.Attribute("mandatory").Value, 
     ErrorCount = int.Parse(stepinf.Attribute("errors").Value) 
    }).ToList(); 

結果。私はIDictionaryとして定義し、次にLINQクエリとToDictionary拡張でサブ選択を利用したOptionsというQuestion型のプロパティを作成しようとしました。

Options = (from option in xdoc.Element("options_list").Elements("option") 
    select option) 
    .ToDictionary(x => x.Attribute("label").Value, x => x.Value) 

これは、child option_list要素を持たないstepinfレコードに爆弾があると思うので、うまくいきませんでした。とにかく、ページを実行すると、 "オブジェクト参照がオブジェクトのインスタンスに設定されていません" LINQステートメントで取得します。

これは私の現在のLINQスキルの上にありますので、どんな助けでも大歓迎です。

答えて

0

私は 子option_list要素を持っていないstepinfレコードにそれ爆弾 だと思うので、これは動作しませんでした。

評価が正しいため、質問する前にoption_listが存在するかどうかを確認する必要があります。 nullかどうかをチェックして辞書を返すか、それに応じてnullを返します。

はこれを試してみてください:

Options = stepinf.Element("options_list") == null ? null : 
       stepinf.Element("options_list").Elements("option") 
        .ToDictionary(x => x.Attribute("label").Value, x => x.Value) 
+0

は非常に多くのアフマド、ありがとうございました。私はnullをチェックする必要があると思っていたが、どうしたらよいか分からなかった。あなたのソリューションは魅力的に機能しました。 –

関連する問題