private static bool TryFormatRss10Channel(Rss10Channel channelToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement channelElement) { channelElement = default; if (channelToFormat == null) { return(false); } channelElement = new XElement(_rss + "channel"); channelElement.Add(new XAttribute(_rdf + "about", channelToFormat.About ?? "")); channelElement.Add(new XElement(_rss + "title", channelToFormat.Title ?? "")); channelElement.Add(new XElement(_rss + "link", channelToFormat.Link ?? "")); channelElement.Add(new XElement(_rss + "description", channelToFormat.Description ?? "")); if (TryFormatRss10Image(channelToFormat.Image, referenceOnly: true, namespaceAliases: namespaceAliases, extensionManifestDirectory, out var imageElement)) { channelElement.Add(imageElement); } if (TryFormatRss10TextInput(channelToFormat.TextInput, referenceOnly: true, namespaceAliases: namespaceAliases, extensionManifestDirectory, out var textInputElement)) { channelElement.Add(textInputElement); } // extensions if (ExtensibleEntityFormatter.TryFormatXElementExtensions(channelToFormat, namespaceAliases, extensionManifestDirectory, out var extensionElements)) { channelElement.AddRange(extensionElements); } // items var liElements = new List <XElement>(); foreach (var itemToFormat in channelToFormat.Items) { if (TryFormatRss10Item(itemToFormat, referenceOnly: true, namespaceAliases: namespaceAliases, extensionManifestDirectory, itemElement: out var liElement)) { liElements.Add(liElement); } } if (liElements.Any()) { var itemsElement = new XElement(_rss + "items"); var seqElement = new XElement(_rdf + "Seq"); seqElement.AddRange(liElements); itemsElement.Add(seqElement); channelElement.Add(itemsElement); } return(true); }
private static bool TryFormatRss20Image(Rss20Image imageToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement imageElement) { imageElement = default; if (imageToFormat == null) { return(false); } imageElement = new XElement("image"); imageElement.Add(new XElement("url") { Value = imageToFormat.Url ?? "" }); imageElement.Add(new XElement("title") { Value = imageToFormat.Title ?? "" }); imageElement.Add(new XElement("link") { Value = imageToFormat.Link ?? "" }); if (imageToFormat.Height != null) { var heightString = imageToFormat.Height.Value.ToString(CultureInfo.InvariantCulture); imageElement.Add(new XElement("height") { Value = heightString }); } if (imageToFormat.Width != null) { var widthString = imageToFormat.Width.Value.ToString(CultureInfo.InvariantCulture); imageElement.Add(new XElement("width") { Value = widthString }); } if (TryFormatOptionalTextElement(imageToFormat.Description, "description", out var descriptionElement)) { imageElement.Add(descriptionElement); } // extensions if (ExtensibleEntityFormatter.TryFormatXElementExtensions(imageToFormat, namespaceAliases, extensionManifestDirectory, out var extensionElements)) { imageElement.AddRange(extensionElements); } return(true); }
private static bool TryFormatMediaRssGroup(MediaRssGroup groupToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement groupElement) { groupElement = default; if (groupToFormat == null) { return(false); } var childElements = new List <XElement>(); // contents foreach (var contentToFormat in groupToFormat.Contents ?? Enumerable.Empty <MediaRssContent>()) { if (TryFormatMediaRssContent(contentToFormat, namespaceAliases, extensionManifestDirectory, out var contentElement)) { childElements.Add(contentElement); } } // container if (TryFormatMediaRssContainer(groupToFormat, namespaceAliases, extensionManifestDirectory, out var containerChildElements)) { foreach (var containerChildElement in containerChildElements) { childElements.Add(containerChildElement); } } // extensions if (ExtensibleEntityFormatter.TryFormatXElementExtensions(groupToFormat, namespaceAliases, extensionManifestDirectory, out var extensionElements)) { childElements.AddRange(extensionElements); } if (!childElements.Any()) { return(false); } groupElement = new XElement(_media + "group", childElements); return(true); }
private static bool TryFormatRss10TextInput(Rss10TextInput textInputToFormat, bool referenceOnly, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement textInputElement) { textInputElement = default; if (textInputToFormat == null) { return(false); } textInputElement = referenceOnly ? new XElement(_rss + "textinput", new XAttribute(_rdf + "resource", textInputToFormat.About ?? "")) : new XElement(_rss + "textinput", new XAttribute(_rdf + "about", textInputToFormat.About ?? "")); if (referenceOnly) { return(true); } textInputElement.Add(new XElement(_rss + "title") { Value = textInputToFormat.Title ?? "" }); textInputElement.Add(new XElement(_rss + "description") { Value = textInputToFormat.Description ?? "" }); textInputElement.Add(new XElement(_rss + "name") { Value = textInputToFormat.Name ?? "" }); textInputElement.Add(new XElement(_rss + "link") { Value = textInputToFormat.Link ?? "" }); // extensions if (ExtensibleEntityFormatter.TryFormatXElementExtensions(textInputToFormat, namespaceAliases, extensionManifestDirectory, out var extensionElements)) { textInputElement.AddRange(extensionElements); } return(true); }
private static bool TryFormatMediaRssLocation(MediaRssLocation locationToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement locationElement) { locationElement = default; if (locationToFormat == null) { return(false); } var childObjects = new List <object>(); if (MinutesSecondsTimeSpanFormatter.TryFormatTimeAsString(locationToFormat.Start, out var startFormatted)) { childObjects.Add(new XAttribute("start", startFormatted)); } if (MinutesSecondsTimeSpanFormatter.TryFormatTimeAsString(locationToFormat.End, out var endFormatted)) { childObjects.Add(new XAttribute("end", endFormatted)); } if (!string.IsNullOrEmpty(locationToFormat.Description)) { childObjects.Add(new XAttribute("description", locationToFormat.Description)); } // extensions if (ExtensibleEntityFormatter.TryFormatXElementExtensions(locationToFormat, namespaceAliases, extensionManifestDirectory, out var extensionElements)) { childObjects.AddRange(extensionElements); } if (!childObjects.Any()) { return(false); } locationElement = new XElement(_media + "location", childObjects); return(true); }
private static bool TryFormatRss10Item(Rss10Item itemToFormat, bool referenceOnly, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement itemElement) { itemElement = default; if (itemToFormat == null) { return(false); } itemElement = referenceOnly ? new XElement(_rdf + "li", new XAttribute("resource", itemToFormat.About ?? "")) : new XElement(_rss + "item", new XAttribute(_rdf + "about", itemToFormat.About ?? "")); if (referenceOnly) { return(true); } itemElement.Add(new XElement(_rss + "title") { Value = itemToFormat.Title ?? "" }); itemElement.Add(new XElement(_rss + "link") { Value = itemToFormat.Link ?? "" }); if (TryFormatOptionalTextElement(itemToFormat.Description, _rss + "description", out var descriptionElement)) { itemElement.Add(descriptionElement); } // extensions if (ExtensibleEntityFormatter.TryFormatXElementExtensions(itemToFormat, namespaceAliases, extensionManifestDirectory, out var extensionElements)) { itemElement.AddRange(extensionElements); } return(true); }
private static bool TryFormatRss10Image(Rss10Image imageToFormat, bool referenceOnly, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement imageElement) { imageElement = default; if (imageToFormat == null) { return(false); } imageElement = referenceOnly ? new XElement(_rss + "image", new XAttribute(_rdf + "resource", imageToFormat.About ?? "")) : new XElement(_rss + "image", new XAttribute(_rdf + "about", imageToFormat.About ?? "")); if (referenceOnly) { return(true); } imageElement.Add(new XElement(_rss + "title") { Value = imageToFormat.Title ?? "" }); imageElement.Add(new XElement(_rss + "url") { Value = imageToFormat.Url ?? "" }); imageElement.Add(new XElement(_rss + "link") { Value = imageToFormat.Link ?? "" }); // extensions if (ExtensibleEntityFormatter.TryFormatXElementExtensions(imageToFormat, namespaceAliases, extensionManifestDirectory, out var extensionElements)) { imageElement.AddRange(extensionElements); } return(true); }
private static bool TryFormatRss20TextInput(Rss20TextInput textInputToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement textInputElement) { textInputElement = default; if (textInputToFormat == null) { return(false); } textInputElement = new XElement("textInput"); textInputElement.Add(new XElement("title") { Value = textInputToFormat.Title ?? "" }); textInputElement.Add(new XElement("description") { Value = textInputToFormat.Description ?? "" }); textInputElement.Add(new XElement("name") { Value = textInputToFormat.Name ?? "" }); textInputElement.Add(new XElement("link") { Value = textInputToFormat.Link ?? "" }); // extensions if (ExtensibleEntityFormatter.TryFormatXElementExtensions(textInputToFormat, namespaceAliases, extensionManifestDirectory, out var extensionElements)) { textInputElement.AddRange(extensionElements); } return(true); }
private static bool TryFormatMediaRssContent(MediaRssContent contentToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement contentElement) { contentElement = default; if (contentToFormat == null) { return(false); } var childElements = new List <XElement>(); var attributes = new List <XAttribute>(); // content fields if (!string.IsNullOrEmpty(contentToFormat.Url)) { attributes.Add(new XAttribute("url", contentToFormat.Url)); } if (contentToFormat.FileSize != null) { attributes.Add(new XAttribute("fileSize", contentToFormat.FileSize.Value.ToString(CultureInfo.InvariantCulture))); } if (!string.IsNullOrEmpty(contentToFormat.Type)) { attributes.Add(new XAttribute("type", contentToFormat.Type)); } if (contentToFormat.Medium != null) { attributes.Add(new XAttribute("medium", contentToFormat.Medium.Value.ToString().ToLowerInvariant())); } if (contentToFormat.IsDefault != null) { attributes.Add(new XAttribute("isDefault", contentToFormat.IsDefault.Value ? "true" : "false")); } if (contentToFormat.Expression != MediaRssExpression.Full) { attributes.Add(new XAttribute("expression", contentToFormat.Expression.ToString().ToLowerInvariant())); } if (contentToFormat.BitRate != null) { attributes.Add(new XAttribute("bitrate", contentToFormat.BitRate.Value.ToString("0.####", CultureInfo.InvariantCulture))); } if (contentToFormat.FrameRate != null) { attributes.Add(new XAttribute("framerate", contentToFormat.FrameRate.Value.ToString("0.####", CultureInfo.InvariantCulture))); } if (contentToFormat.SamplingRate != null) { attributes.Add(new XAttribute("samplingrate", contentToFormat.SamplingRate.Value.ToString("0.####", CultureInfo.InvariantCulture))); } if (contentToFormat.Channels != null) { attributes.Add(new XAttribute("channels", contentToFormat.Channels.Value.ToString(CultureInfo.InvariantCulture))); } if (contentToFormat.Duration != null) { attributes.Add(new XAttribute("duration", contentToFormat.Duration.Value.TotalSeconds.ToString("0.####", CultureInfo.InvariantCulture))); } if (contentToFormat.Height != null) { attributes.Add(new XAttribute("height", contentToFormat.Height.Value.ToString(CultureInfo.InvariantCulture))); } if (contentToFormat.Width != null) { attributes.Add(new XAttribute("width", contentToFormat.Width.Value.ToString(CultureInfo.InvariantCulture))); } if (!string.IsNullOrEmpty(contentToFormat.Lang)) { attributes.Add(new XAttribute("lang", contentToFormat.Lang)); } // container if (TryFormatMediaRssContainer(contentToFormat, namespaceAliases, extensionManifestDirectory, out var containerChildElements)) { foreach (var containerChildElement in containerChildElements) { childElements.Add(containerChildElement); } } // extensions if (ExtensibleEntityFormatter.TryFormatXElementExtensions(contentToFormat, namespaceAliases, extensionManifestDirectory, out var extensionElements)) { childElements.AddRange(extensionElements); } if (!childElements.Any() && !attributes.Any()) { return(false); } contentElement = new XElement(_media + "content", attributes); contentElement.AddRange(childElements); return(true); }
public static bool TryFormatAtom10Feed(Atom10Feed feed, out XDocument document, ExtensionManifestDirectory extensionManifestDirectory = null) { document = default; if (feed == null) { return(false); } document = new XDocument(); var feedElement = new XElement(_atom + "feed"); document.Add(feedElement); var namespaceAliases = new XNamespaceAliasSet(); namespaceAliases.EnsureNamespaceAlias(alias: null, _atom); if (extensionManifestDirectory == null) { extensionManifestDirectory = ExtensionManifestDirectory.DefaultForAtom; } if (TryFormatAtom10OptionalTextAttribute(feed.Lang, _xml + "lang", out var langAttribute)) { feedElement.Add(langAttribute); } if (TryFormatAtom10OptionalTextAttribute(feed.Base, _xml + "base", out var baseAttribute)) { feedElement.Add(baseAttribute); } if (TryFormatAtom10RequiredTextElement(feed.Id, _atom + "id", out var idElement)) { feedElement.Add(idElement); } if (TryFormatAtom10TextRequired(feed.Title, _atom + "title", out var titleElement)) { feedElement.Add(titleElement); } if (TryFormatAtom10TimestampRequired(feed.Updated, _atom + "updated", out var updatedElement)) { feedElement.Add(updatedElement); } foreach (var authorToFormat in feed.Authors) { if (TryFormatAtom10Person(authorToFormat, _atom + "author", out var authorElement)) { feedElement.Add(authorElement); } } foreach (var linkToFormat in feed.Links) { if (TryFormatAtom10Link(linkToFormat, out var linkElement)) { feedElement.Add(linkElement); } } foreach (var categoryToFormat in feed.Categories) { if (TryFormatAtom10Category(categoryToFormat, out var categoryElement)) { feedElement.Add(categoryElement); } } foreach (var contributorToFormat in feed.Contributors) { if (TryFormatAtom10Person(contributorToFormat, _atom + "contributor", out var contributorElement)) { feedElement.Add(contributorElement); } } if (TryFormatAtom10Generator(feed.Generator, out var generatorElement)) { feedElement.Add(generatorElement); } if (TryFormatAtom10OptionalTextElement(feed.Icon, _atom + "icon", out var iconElement)) { feedElement.Add(iconElement); } if (TryFormatAtom10OptionalTextElement(feed.Logo, _atom + "logo", out var logoElement)) { feedElement.Add(logoElement); } if (TryFormatAtom10TextOptional(feed.Rights, _atom + "rights", out var rightsElement)) { feedElement.Add(rightsElement); } if (TryFormatAtom10TextOptional(feed.Subtitle, _atom + "subtitle", out var subtitleElement)) { feedElement.Add(subtitleElement); } // extensions if (ExtensibleEntityFormatter.TryFormatXElementExtensions(feed, namespaceAliases, extensionManifestDirectory, out var extensionElements)) { feedElement.AddRange(extensionElements); } // entries foreach (var entryToFormat in feed.Entries) { if (TryFormatAtom10Entry(entryToFormat, namespaceAliases, extensionManifestDirectory, out var entryElement)) { feedElement.Add(entryElement); } } foreach (var namespaceAlias in namespaceAliases.OrderBy(x => x.Name.LocalName)) { feedElement.Add(namespaceAlias); } return(true); }
private static bool TryFormatAtom10Entry(Atom10Entry entryToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement entryElement) { entryElement = default; if (entryToFormat == null) { return(false); } entryElement = new XElement(_atom + "entry"); if (TryFormatAtom10RequiredTextElement(entryToFormat.Id, _atom + "id", out var idElement)) { entryElement.Add(idElement); } if (TryFormatAtom10TextRequired(entryToFormat.Title, _atom + "title", out var titleElement)) { entryElement.Add(titleElement); } if (TryFormatAtom10TimestampRequired(entryToFormat.Updated, _atom + "updated", out var updatedElement)) { entryElement.Add(updatedElement); } foreach (var authorToFormat in entryToFormat.Authors) { if (TryFormatAtom10Person(authorToFormat, _atom + "author", out var authorElement)) { entryElement.Add(authorElement); } } if (TryFormatAtom10Content(entryToFormat.Content, out var contentElement)) { entryElement.Add(contentElement); } foreach (var linkToFormat in entryToFormat.Links) { if (TryFormatAtom10Link(linkToFormat, out var linkElement)) { entryElement.Add(linkElement); } } if (TryFormatAtom10TextOptional(entryToFormat.Summary, _atom + "summary", out var summaryElement)) { entryElement.Add(summaryElement); } foreach (var categoryToFormat in entryToFormat.Categories) { if (TryFormatAtom10Category(categoryToFormat, out var categoryElement)) { entryElement.Add(categoryElement); } } foreach (var contributorToFormat in entryToFormat.Contributors) { if (TryFormatAtom10Person(contributorToFormat, _atom + "contributor", out var contributorElement)) { entryElement.Add(contributorElement); } } if (TryFormatAtom10TimestampOptional(entryToFormat.Published, _atom + "published", out var publishedElement)) { entryElement.Add(publishedElement); } if (TryFormatAtom10TextOptional(entryToFormat.Rights, _atom + "rights", out var rightsElement)) { entryElement.Add(rightsElement); } if (TryFormatAtom10Source(entryToFormat.Source, out var sourceElement)) { entryElement.Add(sourceElement); } // extensions if (ExtensibleEntityFormatter.TryFormatXElementExtensions(entryToFormat, namespaceAliases, extensionManifestDirectory, out var extensionElements)) { entryElement.AddRange(extensionElements); } return(true); }
public static bool TryFormatJsonFeed(JsonFeed feedToFormat, out JObject feedObject, ExtensionManifestDirectory extensionManifestDirectory = null) { feedObject = default; if (feedToFormat == null) { return(false); } feedObject = new JObject { new JProperty("version", new JValue(JsonFeedConstants.Version)), }; if (extensionManifestDirectory == null) { extensionManifestDirectory = ExtensionManifestDirectory.DefaultForJsonFeed; } if (TryFormatJsonFeedRequiredStringProperty("title", feedToFormat.Title, out var titleProperty)) { feedObject.Add(titleProperty); } if (TryFormatJsonFeedOptionalStringProperty("home_page_url", feedToFormat.HomePageUrl, out var homePageUrlProperty)) { feedObject.Add(homePageUrlProperty); } if (TryFormatJsonFeedOptionalStringProperty("feed_url", feedToFormat.FeedUrl, out var feedUrlProperty)) { feedObject.Add(feedUrlProperty); } if (TryFormatJsonFeedOptionalStringProperty("description", feedToFormat.Description, out var descriptionProperty)) { feedObject.Add(descriptionProperty); } if (TryFormatJsonFeedOptionalStringProperty("user_comment", feedToFormat.UserComment, out var userCommentProperty)) { feedObject.Add(userCommentProperty); } if (TryFormatJsonFeedOptionalStringProperty("next_url", feedToFormat.NextUrl, out var nextUrlProperty)) { feedObject.Add(nextUrlProperty); } if (TryFormatJsonFeedOptionalStringProperty("icon", feedToFormat.Icon, out var iconProperty)) { feedObject.Add(iconProperty); } if (TryFormatJsonFeedOptionalStringProperty("favicon", feedToFormat.Favicon, out var faviconProperty)) { feedObject.Add(faviconProperty); } if (TryFormatJsonFeedAuthorProperty("author", feedToFormat.Author, out var authorProperty)) { feedObject.Add(authorProperty); } if (TryFormatJsonFeedOptionalBoolProperty("expired", feedToFormat.Expired, out var expiredProperty)) { feedObject.Add(expiredProperty); } if (TryFormatJsonFeedHubsProperty("hubs", feedToFormat.Hubs, out var hubsProperty)) { feedObject.Add(hubsProperty); } if (TryFormatJsonFeedItemsProperty("items", feedToFormat.Items, extensionManifestDirectory, out var itemsProperty)) { feedObject.Add(itemsProperty); } // extensions if (ExtensibleEntityFormatter.TryFormatJObjectExtensions(feedToFormat, extensionManifestDirectory, out var extensionTokens)) { feedObject.AddRange(extensionTokens); } return(true); }
private static bool TryFormatJsonFeedItemObject(JsonFeedItem itemToFormat, ExtensionManifestDirectory extensionManifestDirectory, out JObject itemObject) { itemObject = default; if (itemToFormat == null) { return(false); } itemObject = new JObject(); if (TryFormatJsonFeedRequiredStringProperty("id", itemToFormat.Id, out var idProperty)) { itemObject.Add(idProperty); } if (TryFormatJsonFeedOptionalStringProperty("url", itemToFormat.Url, out var urlProperty)) { itemObject.Add(urlProperty); } if (TryFormatJsonFeedOptionalStringProperty("external_url", itemToFormat.ExternalUrl, out var externalUrlProperty)) { itemObject.Add(externalUrlProperty); } if (TryFormatJsonFeedOptionalStringProperty("title", itemToFormat.Title, out var titleProperty)) { itemObject.Add(titleProperty); } if (TryFormatJsonFeedOptionalStringProperty("content_html", itemToFormat.ContentHtml, out var contentHtmlProperty)) { itemObject.Add(contentHtmlProperty); } if (TryFormatJsonFeedOptionalStringProperty("content_text", itemToFormat.ContentText, out var contentTextProperty)) { itemObject.Add(contentTextProperty); } if (TryFormatJsonFeedOptionalStringProperty("summary", itemToFormat.Summary, out var summaryProperty)) { itemObject.Add(summaryProperty); } if (TryFormatJsonFeedOptionalStringProperty("image", itemToFormat.Image, out var imageProperty)) { itemObject.Add(imageProperty); } if (TryFormatJsonFeedOptionalStringProperty("banner_image", itemToFormat.BannerImage, out var bannerImageProperty)) { itemObject.Add(bannerImageProperty); } if (TryFormatJsonFeedOptionalTimestampProperty("date_published", itemToFormat.DatePublished, out var datePublishedProperty)) { itemObject.Add(datePublishedProperty); } if (TryFormatJsonFeedOptionalTimestampProperty("date_modified", itemToFormat.DateModified, out var dateModifiedProperty)) { itemObject.Add(dateModifiedProperty); } if (TryFormatJsonFeedAuthorProperty("author", itemToFormat.Author, out var authorProperty)) { itemObject.Add(authorProperty); } if (TryFormatJsonFeedTagsProperty("tags", itemToFormat.Tags, out var tagsProperty)) { itemObject.Add(tagsProperty); } if (TryFormatJsonFeedAttachmentsProperty("attachments", itemToFormat.Attachments, out var attachmentsProperty)) { itemObject.Add(attachmentsProperty); } // extensions if (ExtensibleEntityFormatter.TryFormatJObjectExtensions(itemToFormat, extensionManifestDirectory, out var extensionTokens)) { itemObject.AddRange(extensionTokens); } return(true); }
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 TryFormatRss20Item(Rss20Item itemToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement itemElement) { itemElement = default; if (itemToFormat == null) { return(false); } itemElement = new XElement("item"); if (TryFormatOptionalTextElement(itemToFormat.Title, "title", out var titleElement)) { itemElement.Add(titleElement); } if (TryFormatOptionalTextElement(itemToFormat.Link, "link", out var linkElement)) { itemElement.Add(linkElement); } if (TryFormatOptionalTextElement(itemToFormat.Description, "description", out var descriptionElement)) { itemElement.Add(descriptionElement); } if (TryFormatOptionalTextElement(itemToFormat.Author, "author", out var authorElement)) { itemElement.Add(authorElement); } if (TryFormatOptionalTextElement(itemToFormat.Comments, "comments", out var commentsElement)) { itemElement.Add(commentsElement); } foreach (var categoryToFormat in itemToFormat.Categories) { if (TryFormatRss20Category(categoryToFormat, out var categoryElement)) { itemElement.Add(categoryElement); } } foreach (var enclosureToFormat in itemToFormat.Enclosures) { if (TryFormatRss20Enclosure(enclosureToFormat, out var enclosureElement)) { itemElement.Add(enclosureElement); } } if (TryFormatRss20Timestamp(itemToFormat.PubDate, "pubDate", out var pubDateElement)) { itemElement.Add(pubDateElement); } if (TryFormatRss20Source(itemToFormat.Source, out var sourceElement)) { itemElement.Add(sourceElement); } if (TryFormatRss20Guid(itemToFormat.Guid, out var guidElement)) { itemElement.Add(guidElement); } // extensions if (ExtensibleEntityFormatter.TryFormatXElementExtensions(itemToFormat, namespaceAliases, extensionManifestDirectory, out var extensionElements)) { itemElement.AddRange(extensionElements); } return(true); }