Apricot.Fetcher.ParseAtom10 C# (CSharp) Method

ParseAtom10() private method

private ParseAtom10 ( XmlNode xmlRootNode ) : List
xmlRootNode System.Xml.XmlNode
return List
        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;
        }