private List<Entry> ParseRss20(XmlNode xmlRootNode)
{
List<Entry> entryList = new List<Entry>();
string webMaster = null;
DateTime pubDate = new DateTime(0);
Uri imageUri = null;
foreach (XmlNode childNode in xmlRootNode.ChildNodes)
{
if (childNode.Name.Equals("channel"))
{
foreach (XmlNode xmlNode in childNode.ChildNodes)
{
if (xmlNode.Name.Equals("webMaster") || xmlNode.NamespaceURI.Equals("http://purl.org/dc/elements/1.1/") && xmlNode.LocalName.Equals("creator"))
{
webMaster = xmlNode.InnerText;
}
else if (xmlNode.Name.Equals("pubDate"))
{
try
{
pubDate = ParseRfc822(xmlNode.InnerText);
}
catch
{
DateTime dt;
if (DateTime.TryParse(xmlNode.InnerText, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
{
pubDate = dt;
}
}
}
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))
{
pubDate = dt;
}
}
}
}
else if (childNode.Name.Equals("image"))
{
foreach (XmlNode xmlNode in childNode.ChildNodes)
{
if (xmlNode.Name.Equals("url"))
{
Uri uri;
if (Uri.TryCreate(xmlNode.InnerText, UriKind.Absolute, out uri))
{
imageUri = uri;
}
}
}
}
}
foreach (XmlNode childNode in xmlRootNode.ChildNodes)
{
if (childNode.Name.Equals("channel"))
{
foreach (XmlNode itemNode in childNode.ChildNodes)
{
if (itemNode.Name.Equals("item"))
{
Entry entry = new Entry();
entry.Author = webMaster;
entry.Created = entry.Modified = pubDate;
entry.Image = imageUri;
foreach (XmlNode xmlNode in itemNode.ChildNodes)
{
if (xmlNode.Name.Equals("title"))
{
entry.Title = xmlNode.InnerText;
}
else if (xmlNode.Name.Equals("link"))
{
Uri uri;
if (Uri.TryCreate(xmlNode.InnerText, UriKind.Absolute, out uri))
{
entry.Resource = uri;
}
}
else if (xmlNode.Name.Equals("description"))
{
entry.Description = xmlNode.InnerText;
}
else if (xmlNode.Name.Equals("pubDate"))
{
try
{
entry.Created = entry.Modified = ParseRfc822(xmlNode.InnerText);
}
catch
{
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/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;
}
}
}
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;
}