private List<Entry> ParseRss10(XmlNode xmlRootNode)
{
const string namespaceURI = "http://purl.org/rss/1.0/";
List<Entry> entryList = new List<Entry>();
string dcCreator = null;
DateTime dcDate = new DateTime(0);
Uri imageUri = null;
foreach (XmlNode childNode in xmlRootNode.ChildNodes)
{
if (childNode.NamespaceURI.Equals(namespaceURI))
{
if (childNode.LocalName.Equals("channel"))
{
foreach (XmlNode xmlNode in childNode.ChildNodes)
{
if (xmlNode.NamespaceURI.Equals("http://purl.org/dc/elements/1.1/") && xmlNode.LocalName.Equals("creator"))
{
dcCreator = xmlNode.InnerText;
}
else if (xmlNode.NamespaceURI.Equals("http://purl.org/dc/elements/1.1/") && xmlNode.LocalName.Equals("date"))
{
DateTime dt;
if (DateTime.TryParse(xmlNode.InnerText, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
{
dcDate = dt;
}
}
}
}
else if (childNode.LocalName.Equals("image"))
{
foreach (XmlNode xmlNode in childNode.ChildNodes)
{
if (xmlNode.NamespaceURI.Equals(namespaceURI) && xmlNode.LocalName.Equals("url"))
{
Uri uri;
if (Uri.TryCreate(xmlNode.InnerText, UriKind.Absolute, out uri))
{
imageUri = uri;
}
}
}
}
}
}
foreach (XmlNode childNode in xmlRootNode.ChildNodes)
{
if (childNode.NamespaceURI.Equals(namespaceURI) && childNode.LocalName.Equals("item"))
{
Entry entry = new Entry();
string description = null;
string contentEncoded = null;
entry.Author = dcCreator;
entry.Created = entry.Modified = dcDate;
entry.Image = imageUri;
foreach (XmlNode xmlNode in childNode.ChildNodes)
{
if (xmlNode.NamespaceURI.Equals(namespaceURI) && xmlNode.LocalName.Equals("title"))
{
entry.Title = xmlNode.InnerText;
}
else if (xmlNode.NamespaceURI.Equals(namespaceURI) && xmlNode.LocalName.Equals("link"))
{
Uri uri;
if (Uri.TryCreate(xmlNode.InnerText, UriKind.Absolute, out uri))
{
entry.Resource = uri;
}
}
else if (xmlNode.NamespaceURI.Equals(namespaceURI) && xmlNode.LocalName.Equals("description"))
{
description = xmlNode.InnerText;
}
else if (xmlNode.NamespaceURI.Equals("http://purl.org/dc/elements/1.1/") && xmlNode.LocalName.Equals("creator"))
{
entry.Author = xmlNode.InnerText;
}
else if (xmlNode.NamespaceURI.Equals("http://purl.org/dc/elements/1.1/") && xmlNode.LocalName.Equals("date"))
{
DateTime dt;
if (DateTime.TryParse(xmlNode.InnerText, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
{
entry.Created = entry.Modified = dt;
}
}
else if (xmlNode.NamespaceURI.Equals("http://purl.org/rss/1.0/modules/content/") && xmlNode.LocalName.Equals("encoded"))
{
contentEncoded = xmlNode.InnerText;
}
}
if (contentEncoded == null)
{
entry.Description = description;
}
else
{
entry.Description = contentEncoded;
}
if (entry.Created.Ticks == 0)
{
if (entry.Modified.Ticks == 0)
{
entry.Created = DateTime.Today;
}
else
{
entry.Created = entry.Modified;
}
}
if (entry.Created > entry.Modified)
{
entry.Modified = entry.Created;
}
entryList.Add(entry);
}
}
return entryList;
}