Не могу вытащить из xml ссылку на фотографию

Хочу реализовать отображение новостей Вконтакте на Windows Phone 7. С авторизацией все ок, даю запрос на получение новостей, получаю ответ. И вот тут проблема: каждая новость - отдельный итем, который держит в себе инфу и контент. В этом интеме могут быть фотографии, видео, текст, и тд. Вытянуть текст и ид запостившего новость у меня получается. Но если в новости нет фото(или есть, все-равно пока непонятно) - при попытке присваивания полю адреса этой (несуществующей) фото вылетает NullReferenceException, хотя я пытаюсь сначала проверить, есть ли там фото, и если нет - просто оставить поле пустым. Код:

/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .csharp.geshi_code {font-family:monospace;} .csharp.geshi_code .imp {font-weight: bold; color: red;} .csharp.geshi_code .kw1 {color: #0600FF;} .csharp.geshi_code .kw2 {color: #FF8000; font-weight: bold;} .csharp.geshi_code .kw3 {color: #008000;} .csharp.geshi_code .kw4 {color: #FF0000;} .csharp.geshi_code .kw5 {color: #000000;} .csharp.geshi_code .co1 {color: #008080; font-style: italic;} .csharp.geshi_code .co2 {color: #008080;} .csharp.geshi_code .co3 {color: #008080;} .csharp.geshi_code .coMULTI {color: #008080; font-style: italic;} .csharp.geshi_code .es0 {color: #008080; font-weight: bold;} .csharp.geshi_code .es_h {color: #008080; font-weight: bold;} .csharp.geshi_code .br0 {color: #000000;} .csharp.geshi_code .sy0 {color: #008000;} .csharp.geshi_code .st0 {color: #666666;} .csharp.geshi_code .st_h {color: #666666;} .csharp.geshi_code .nu0 {color: #FF0000;} .csharp.geshi_code .me1 {color: #0000FF;} .csharp.geshi_code .me2 {color: #0000FF;} .csharp.geshi_code span.xtra { display:block; }

void c_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) { XDocument xml = XDocument.Load(e.Result); //полученый xml от апи вконтакта MessageBox.Show(xml.ToString()); List<News> news = new List<News>(); // лист новостей

                var inf = from c in xml.Descendants("item") // в inf лежат отдельные итемы
                          select c;

                foreach (var item in inf)
                {
                    News new1 = new News();
                    if ((string)item.Element("source_id").Value != null)
                        new1.SoourseId = (string)item.Element("source_id").Value; // тут все ок
                    if ((string)item.Element("text") != null)
                        new1.Text = (string)item.Element("text"); // и сдесь тоже
                    if ((string)item.Element("attachment").Element("photo").Element("owner_id") != null) // а вот тут выбивает NullReferenceException
                    {
                        PhotoAttachment photo = new PhotoAttachment();
                        photo.OwnerId = (string)item.Element("attachment").Element("photo").Element("owner_id").Value;
                        photo.Small = (string)item.Element("attachment").Element("photo").Element("src_small").Value;
                        photo.Big = (string)item.Element("attachment").Element("photo").Element("src_big").Value;
                        new1.photoAttachment = photo;
                    }
                    news.Add(new1);
                    new1 = null;
                }  
}
 

Вообщем такая вот проблема.

1 ответов


Вот стоило только написать вопрос, как ответ сразу пришел в голову)
Нужно было проверять каждый item.Element("тег") на null. Вообщем, вот правильный вариант


if (item.Element("attachment") != null)                          
  if(item.Element("attachment").Element("photo")!= null)                                
if(item.Element("attachment").Element("photo").Element("owner_id").Value != null)                          
{ тут что-то делаем}