Apricot.Fetcher.ParseRss10 C# (CSharp) Method

ParseRss10() private method

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