예제 #1
0
        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);
        }
예제 #2
0
        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);
        }