private static bool TryFormatRss20Channel(Rss20Channel channelToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement channelElement) { channelElement = default; if (channelToFormat == null) { return(false); } channelElement = new XElement("channel"); channelElement.Add(new XElement("title", channelToFormat.Title ?? "")); channelElement.Add(new XElement("link", channelToFormat.Link ?? "")); channelElement.Add(new XElement("description", channelToFormat.Description ?? "")); if (TryFormatOptionalTextElement(channelToFormat.Language, "language", out var languageElement)) { channelElement.Add(languageElement); } if (TryFormatOptionalTextElement(channelToFormat.Copyright, "copyright", out var copyrightElement)) { channelElement.Add(copyrightElement); } if (TryFormatOptionalTextElement(channelToFormat.ManagingEditor, "managingEditor", out var managingEditorElement)) { channelElement.Add(managingEditorElement); } if (TryFormatOptionalTextElement(channelToFormat.WebMaster, "webMaster", out var webMasterElement)) { channelElement.Add(webMasterElement); } if (TryFormatOptionalTextElement(channelToFormat.Generator, "generator", out var generatorElement)) { channelElement.Add(generatorElement); } if (TryFormatOptionalTextElement(channelToFormat.Docs, "docs", out var docsElement)) { channelElement.Add(docsElement); } if (TryFormatRss20Timestamp(channelToFormat.PubDate, "pubDate", out var pubDateElement)) { channelElement.Add(pubDateElement); } if (TryFormatRss20Timestamp(channelToFormat.LastBuildDate, "lastBuildDate", out var lastBuildDateElement)) { channelElement.Add(lastBuildDateElement); } foreach (var categoryToFormat in channelToFormat.Categories) { if (TryFormatRss20Category(categoryToFormat, out var categoryElement)) { channelElement.Add(categoryElement); } } if (TryFormatRss20Cloud(channelToFormat.Cloud, out var cloudElement)) { channelElement.Add(cloudElement); } if (TryFormatRss20Ttl(channelToFormat.Ttl, out var ttlElement)) { channelElement.Add(ttlElement); } if (TryFormatRss20Image(channelToFormat.Image, namespaceAliases, extensionManifestDirectory, out var imageElement)) { channelElement.Add(imageElement); } if (TryFormatRss20TextInput(channelToFormat.TextInput, namespaceAliases, extensionManifestDirectory, out var textInputElement)) { channelElement.Add(textInputElement); } if (TryFormatRss20SkipHours(channelToFormat.SkipHours, out var skipHoursElement)) { channelElement.Add(skipHoursElement); } if (TryFormatRss20SkipDays(channelToFormat.SkipDays, out var skipDaysElement)) { channelElement.Add(skipDaysElement); } // extensions if (ExtensibleEntityFormatter.TryFormatXElementExtensions(channelToFormat, namespaceAliases, extensionManifestDirectory, out var extensionElements)) { channelElement.AddRange(extensionElements); } // items foreach (var itemToFormat in channelToFormat.Items) { if (TryFormatRss20Item(itemToFormat, namespaceAliases, extensionManifestDirectory, out var itemElement)) { channelElement.Add(itemElement); } } return(true); }
private static bool TryParseRss20Channel(XElement channelElement, ExtensionManifestDirectory extensionManifestDirectory, out Rss20Channel parsedChannel) { parsedChannel = default; if (channelElement == null) { return(false); } parsedChannel = new Rss20Channel(); parsedChannel.Title = channelElement.Element("title")?.Value.Trim(); parsedChannel.Link = channelElement.Element("link")?.Value.Trim(); parsedChannel.Description = channelElement.Element("description")?.Value.Trim(); parsedChannel.Language = channelElement.Element("language")?.Value.Trim(); parsedChannel.Copyright = channelElement.Element("copyright")?.Value.Trim(); parsedChannel.ManagingEditor = channelElement.Element("managingEditor")?.Value.Trim(); parsedChannel.WebMaster = channelElement.Element("webMaster")?.Value.Trim(); parsedChannel.Generator = channelElement.Element("generator")?.Value.Trim(); parsedChannel.Docs = channelElement.Element("docs")?.Value.Trim(); if (TryParseRss20Timestamp(channelElement.Element("pubDate"), out var parsedPubDate)) { parsedChannel.PubDate = parsedPubDate; } if (TryParseRss20Timestamp(channelElement.Element("lastBuildDate"), out var parsedLastBuildDate)) { parsedChannel.LastBuildDate = parsedLastBuildDate; } foreach (var categoryElement in channelElement.Elements("category")) { if (TryParseRss20Category(categoryElement, out var parsedCategory)) { parsedChannel.Categories.Add(parsedCategory); } } if (TryParseRss20Cloud(channelElement.Element("cloud"), out var parsedCloud)) { parsedChannel.Cloud = parsedCloud; } if (TryParseRss20Ttl(channelElement.Element("ttl"), out var parsedTtl)) { parsedChannel.Ttl = parsedTtl; } if (TryParseRss20Image(channelElement.Element("image"), extensionManifestDirectory, out var parsedImage)) { parsedChannel.Image = parsedImage; } if (TryParseRss20TextInput(channelElement.Element("textInput"), extensionManifestDirectory, out var parsedTextInput)) { parsedChannel.TextInput = parsedTextInput; } if (TryParseRss20SkipHours(channelElement.Element("skipHours"), out var parsedSkipHours)) { parsedChannel.SkipHours = parsedSkipHours; } if (TryParseRss20SkipDays(channelElement.Element("skipDays"), out var parsedSkipDays)) { parsedChannel.SkipDays = parsedSkipDays; } // extensions ExtensibleEntityParser.ParseXElementExtensions(channelElement, extensionManifestDirectory, parsedChannel); // items foreach (var itemElement in channelElement.Elements("item")) { if (TryParseRss20Item(itemElement, extensionManifestDirectory, out var parsedItem)) { parsedChannel.Items.Add(parsedItem); } } return(true); }