2010-07-07 1 views
2

Я написал фрагмент кода для извлечения элементарной информации из фида Atom (например, SO-канала) с использованием запроса LINQ to XML.Анализ фида Atom через LINQ to XML

Я хотел бы знать, имеются ли случаи, когда этот код может потерпеть неудачу или если есть более элегантные способы.

Спасибо за поддержку.

var url = @"http://stackoverflow.com/feeds"; 
XDocument rss = XDocument.Load(url); 

var q = from i in rss.Root.Elements("{http://www.w3.org/2005/Atom}entry") 
select new { 
     Title = i.Element("{http://www.w3.org/2005/Atom}title").Value, 
     URL = i.Element("{http://www.w3.org/2005/Atom}link").Attribute("href").Value}; 

ответ

3

Ну если Element("{http://www.w3.org/2005/Atom}title") или Element("{http://www.w3.org/2005/Atom}link") не существует, то вы получите нулевой ссылочный исключение.

Линия URL имеет две возможности для отказа, поскольку вы ищете атрибут «href», не проверяя, что он действительно существует.

Вы должны внести некоторые проверки для этого и решить, что вы хотите сделать, если какой-либо из этих элементов или атрибута не существует.

+0

Что касается явной зависимости от пространства имен Atom 2005? Можно ли это избежать? Кстати, я видел, что связанный с этим вопрос «LINQ с фидами ATOM» вполне отвечает моим :) – hemme

+0

Просто для удобства :) http://stackoverflow.com/questions/1290851/linq-with-atom-feeds Предлагаемый класс System.ServiceModel.Syndication.SyndicationFeed – rdoubleui