private List<Entry> ParseAtom10(XmlNode xmlRootNode)
{
const string namespaceURI = "http://www.w3.org/2005/Atom";
List<Entry> entryList = new List<Entry>();
string author = null;
Uri icon = null;
Uri logo = null;
DateTime updated = new DateTime(0);
foreach (XmlNode xmlNode in xmlRootNode.ChildNodes)
{
if (xmlNode.NamespaceURI.Equals(namespaceURI))
{
if (xmlNode.LocalName.Equals("updated"))
{
DateTime dt;
if (DateTime.TryParse(xmlNode.InnerText, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
{
updated = dt;
}
}
else if (xmlNode.LocalName.Equals("author"))
{
foreach (XmlNode xmlChildNode in xmlNode.ChildNodes)
{
if (xmlChildNode.NamespaceURI.Equals(namespaceURI) && xmlChildNode.LocalName.Equals("name"))
{
author = xmlChildNode.InnerText;
}
}
}
else if (xmlNode.LocalName.Equals("icon"))
{
Uri uri;
if (Uri.TryCreate(xmlNode.InnerText, UriKind.Absolute, out uri))
{
icon = uri;
}
}
else if (xmlNode.LocalName.Equals("logo"))
{
Uri uri;
if (Uri.TryCreate(xmlNode.InnerText, UriKind.Absolute, out uri))
{
logo = uri;
}
}
}
}
foreach (XmlNode xmlEntryNode in xmlRootNode.ChildNodes)
{
if (xmlEntryNode.NamespaceURI.Equals(namespaceURI) && xmlEntryNode.LocalName.Equals("entry"))
{
string summary = null;
string content = null;
Entry entry = new Entry();
entry.Created = entry.Modified = updated;
entry.Author = author;
if (logo != null)
{
entry.Image = logo;
}
else if (icon != null)
{
entry.Image = icon;
}
foreach (XmlNode xmlNode in xmlEntryNode.ChildNodes)
{
if (xmlNode.NamespaceURI.Equals(namespaceURI))
{
if (xmlNode.LocalName.Equals("title"))
{
entry.Title = xmlNode.InnerText;
}
else if (xmlNode.LocalName.Equals("published") || xmlNode.LocalName.Equals("issued"))
{
DateTime dt;
if (DateTime.TryParse(xmlNode.InnerText, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
{
entry.Created = dt;
}
}
else if (xmlNode.LocalName.Equals("updated") || xmlNode.LocalName.Equals("modified"))
{
DateTime dt;
if (DateTime.TryParse(xmlNode.InnerText, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
{
entry.Modified = dt;
}
}
else if (xmlNode.LocalName.Equals("link"))
{
string href = null;
string rel = null;
foreach (XmlAttribute xmlAttribute in xmlNode.Attributes)
{
if (xmlAttribute.Name.Equals("href"))
{
href = xmlAttribute.Value;
}
else if (xmlAttribute.Name.Equals("rel"))
{
rel = xmlAttribute.Value;
}
}
if (href != null && (rel == null ? true : rel.Equals("alternate")))
{
Uri uri;
if (Uri.TryCreate(href, UriKind.Absolute, out uri))
{
entry.Resource = uri;
}
}
}
else if (xmlNode.LocalName.Equals("author"))
{
foreach (XmlNode xmlChildNode in xmlNode.ChildNodes)
{
if (xmlChildNode.NamespaceURI.Equals(namespaceURI) && xmlChildNode.LocalName.Equals("name"))
{
entry.Author = xmlChildNode.InnerText;
}
}
}
else if (xmlNode.LocalName.Equals("summary"))
{
summary = xmlNode.InnerText;
}
else if (xmlNode.LocalName.Equals("content"))
{
content = xmlNode.InnerText;
}
}
}
if (content == null)
{
entry.Description = summary;
}
else
{
entry.Description = content;
}
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;
}