0

私の問題は、xml のデータに特定のノードが存在しない場合があることです。それを回避"Object reference not set to an instance of an object." errorしてその値をスキップし、リストビューに項目を追加し続けるにはどうすればよいですか?

これが私のlinq to xmlのクエリです

var summary = from r in doc.Descendants("TrxDetailCard") 
                      select new 
                      {
                          Account_Type = r.Element("Account_Type_CH").Value,
                          Captured = r.Element("Captured").Value,
                          Trans_Type_ID = r.Element("Trans_Type_ID").Value,
                          Acct_Num_CH = r.Element("Acct_Num_CH").Value,
                          Tip_Amt_MN = r.Element("Tip_Amt_MN").Value,
                          Total_Amt_MN = r.Element("Total_Amt_MN").Value,
                          Date_DT = r.Element("Date_DT").Value,
                      };

Tip_Amt_MN存在しない場合もある

リストビューに項目を追加

foreach (var i in summary)
        {
            ListViewItem it = new ListViewItem(i.Account_Type.ToString());
            it.SubItems.Add(i.Captured.ToString());
            it.SubItems.Add(i.Trans_Type_ID.ToString());
            it.SubItems.Add(i.Acct_Num_CH.ToString());
            it.SubItems.Add(i.Tip_Amt_MN.ToString());
            it.SubItems.Add(i.Total_Amt_MN.ToString());
            it.SubItems.Add(i.Date_DT.ToString());
            listView1.Items.Add(it);
        }
4

2 に答える 2

1

プロパティが null に設定されても構わない場合は、XElement を文字列にキャストできます。つまり、Account_Type_CH要素が存在しない場合、これは例外をスローしません。

Account_Type = (string)r.Element("Account_Type_CH")
于 2012-12-23T23:38:43.017 に答える
1

クエリを分割したくない状況では、 FirstOrDefault() を自由に使用する傾向があります。

r.Element("Tip_Amt_MN").Value

になります:

r.Elements("Tip_Amt_MN").Select(x => x.Value).FirstOrDefault()
于 2012-12-23T23:42:55.047 に答える