public EnclosureObj(XElement document) { if (document != null) { Url = document.Attribute("url")?.Value; Length = RssValuesHelper.ConvertUlong(document.Attribute("length")?.Value); ContentType = document.Attribute("type")?.Value; } }
public ChannelImageObj(XElement document) { if (document != null) { ImageUrl = document.Element("url")?.Value; Title = document.Element("title")?.Value; Link = document.Element("link")?.Value; Width = RssValuesHelper.ConvertInteger(document.Element("width")?.Value); Height = RssValuesHelper.ConvertInteger(document.Element("height")?.Value); } }
/// <summary> /// Constructor. /// </summary> /// <param name="document">XML document.</param> /// <param name="originalLink">Original link.</param> public PodcastChannel(XDocument document, string originalLink = null) { if (document?.Root == null) { throw new ArgumentNullException(nameof(document)); } var channel = document.Root.Element("channel"); if (channel == null) { throw new ArgumentException("Invalid RSS XML"); } if (originalLink != null) { ChannelUri = originalLink; } else { var atomLink = channel.Elements(Consts.Namespaces.Atom + "link").FirstOrDefault(e => "self".Equals(e.Attribute("rel")?.Value, StringComparison.OrdinalIgnoreCase) && e.Attribute("href") != null); if (atomLink != null) { ChannelUri = atomLink.Attribute("href")?.Value; } } Link = channel.Element("link")?.Value; Description = channel.Element("description")?.Value; Copyright = channel.Element("copyright")?.Value; LastBuildDate = RssValuesHelper.ConvertDateTime(channel.Element("lastBuildDate")?.Value); PubDate = RssValuesHelper.ConvertDateTime(channel.Element("pubDate")?.Value); Category = channel.Element(Consts.Namespaces.Itunes + "category")?.Attribute("text")?.Value ?? channel.Element("category")?.Value; Author = channel.Element(Consts.Namespaces.Itunes + "author")?.Value; Summary = channel.Element(Consts.Namespaces.Itunes + "summary")?.Value; Subtitle = channel.Element(Consts.Namespaces.Itunes + "subtitle")?.Value; Onwer = new Owner(channel.Element(Consts.Namespaces.Itunes + "owner")); var imageElement = channel.Element("image"); ChannelImage = imageElement != null ? new ChannelImageObj(imageElement) : new ChannelImageObj(channel.Element(Consts.Namespaces.Itunes + "image")?.Attribute("href")?.Value); Keywords = (channel.Element(Consts.Namespaces.Itunes + "keywords")?.Value ?? "").Split(',').Select(k => k.Trim()).Where(k => !string.IsNullOrWhiteSpace(k)) .Concat((channel.Element(Consts.Namespaces.Itunes + "keyword")?.Value ?? "").Split(',').Select(k => k.Trim()).Where(k => !string.IsNullOrWhiteSpace(k))) .Distinct(StringComparer.OrdinalIgnoreCase) .ToList(); var itemElements = channel.Elements("item").ToArray(); Episodes = new List <IPodcastEpisode>(); for (int i = 0; i < itemElements.Length; i++) { Episodes.Add(new Episode(i, itemElements[i])); } }
public Episode(int order, XElement document) { Order = order; if (document != null) { PubDate = RssValuesHelper.ConvertDateTime(document.Element("pubDate")?.Value); Title = document.Element("title")?.Value; Link = document.Element("link")?.Value; Guid = document.Element("guid")?.Value; DescriptionHtml = document.Element("description")?.Value; Category = document.Elements("category").Select(e => e.Value).ToList(); Author = document.Element(Consts.Namespaces.Itunes + "author")?.Value; Subtitle = document.Element(Consts.Namespaces.Itunes + "subtitle")?.Value; Summary = document.Element(Consts.Namespaces.Itunes + "summary")?.Value; Duration = RssValuesHelper.ConvertDuration(document.Element(Consts.Namespaces.Itunes + "duration")?.Value); Keywords = (document.Element(Consts.Namespaces.Itunes + "keywords")?.Value ?? "").Split(',').Select(k => k.Trim()).Where(k => !string.IsNullOrWhiteSpace(k)) .Concat((document.Element(Consts.Namespaces.Itunes + "keyword")?.Value ?? "").Split(',').Select(k => k.Trim()).Where(k => !string.IsNullOrWhiteSpace(k))) .Distinct(StringComparer.OrdinalIgnoreCase) .ToList(); ImageUrl = document.Element(Consts.Namespaces.Itunes + "image")?.Attribute("href")?.Value; Enclosure = new EnclosureObj(document.Element("enclosure")); } }