Apricot.Fetcher.ParseRss20 C# (CSharp) Method

ParseRss20() private method

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