private static FeedItem GetItemFromFeedEntry(XPathNodeIterator xPathNodeIterator, IXmlNamespaceResolver xmlNamespaceManager)
{
var item = new FeedItem();
if (xPathNodeIterator.Current != null)
{
var subnav = xPathNodeIterator.Current.CreateNavigator();
var textnode = subnav.SelectSingleNode("atom:title/text()", xmlNamespaceManager);
item.Title = textnode == null ? "(untitled)" : WebUtility.HtmlDecode(textnode.ToString()).Trim();
var linkiterator = subnav.Select("atom:link", xmlNamespaceManager);
while (linkiterator.MoveNext() && item.Link == null)
{
var linknav = linkiterator.Current;
if (linknav != null)
{
if (!linknav.HasAttributes) continue;
var rel = linknav.GetAttribute("rel", "");
if (rel.Equals("alternate"))
{
item.Link = new Uri(linknav.GetAttribute("href", ""));
}
}
}
// If no link with rel = 'alternate' in the entry, just pick the first link
if (item.Link == null)
{
var linknav = subnav.SelectSingleNode("atom:link", xmlNamespaceManager);
if (linknav != null)
{
Uri result;
if (Uri.TryCreate(linknav.GetAttribute("href", ""), UriKind.Absolute, out result))
{
item.Link = result;
}
}
}
var updatednav = subnav.SelectSingleNode("atom:updated/text()", xmlNamespaceManager);
if (updatednav != null)
{
DateTime gdt;
var res = DateTime.TryParse(updatednav.ToString(), out gdt);
if (res)
{
item.Date = gdt;
}
}
}
return item;
}