private void ParseRss20Items(PodcastRss20Feed rssFeed, string xml)
 {
     var document = XDocument.Parse(xml);
     var feedItemNodes = document.Root.Element("channel").Elements("item");
     foreach (var item in feedItemNodes)
     {
         rssFeed.Items.Add(ParseRss20SingleItem(item));
     }
 }
        protected virtual void ParseRss20Header(PodcastRss20Feed rssFeed, string xml)
        {
            var document = XDocument.Parse(xml);
            var channel = document.Root.Element("channel");

            rssFeed.Title = channel.Element("title").Value;
            rssFeed.Description = channel.Element("description").Value;

            var linkNode = channel.Element("link");
            rssFeed.Link = linkNode == null ? string.Empty : linkNode.Value;

            var dateTimeNode = (from dateSelector in channel.Elements("lastBuildDate")
                                select dateSelector).FirstOrDefault();
            if (dateTimeNode == null)
            {
                rssFeed.LastUpdated = DateTime.UtcNow;
            }
            else
            {
                DateTime timeOut;
                DateTime.TryParse(dateTimeNode.Value, out timeOut);
                rssFeed.LastUpdated = timeOut.ToUniversalTime();
            }

            var generatorNode = channel.Element("generator");
            rssFeed.Generator = generatorNode == null ? string.Empty : generatorNode.Value;

            var languageNode = channel.Element("language");
            rssFeed.Language = languageNode == null ? string.Empty : languageNode.Value;



            var categoryNode = channel.Element("category");
            rssFeed.Category = categoryNode == null ? string.Empty : categoryNode.Value;

            var copyrightNode = channel.Element("copyright");
            rssFeed.Copyright = copyrightNode == null ? string.Empty : copyrightNode.Value;

            var managingEditorNode = channel.Element("managingEditor");
            rssFeed.ManagingEditor = managingEditorNode == null ? string.Empty : managingEditorNode.Value;

            var webMasterNode = channel.Element("webMaster");
            rssFeed.WebMaster = webMasterNode == null ? string.Empty : webMasterNode.Value;

            var imageNode = channel.Element("image");
            if (imageNode != null) {
                var urlNode = imageNode.Element("url");
                var titleNode = imageNode.Element("title");
                var link2Node = imageNode.Element("link");
                var widthNode = imageNode.Element("width");
                var heightNode = imageNode.Element("height");

                rssFeed.Image = new PodcastRss20FeedImage();

                rssFeed.Image.Url = urlNode == null ? string.Empty : urlNode.Value;
                rssFeed.Image.Title = titleNode == null ? string.Empty : titleNode.Value;
                rssFeed.Image.Link = link2Node == null ? string.Empty : link2Node.Value;
                rssFeed.Image.Width = widthNode == null ? string.Empty : widthNode.Value;
                rssFeed.Image.Height = heightNode == null ? string.Empty : heightNode.Value;
            }
        }