private static bool TryParseMediaRssGroup(XElement groupElement, XNamespace ns, ExtensionManifestDirectory extensionManifestDirectory, out MediaRssGroup parsedGroup) { parsedGroup = null; if (groupElement == null) { return(false); } // contents foreach (var contentElement in groupElement.Elements(ns + "content")) { if (TryParseMediaRssContent(contentElement, ns, extensionManifestDirectory, out var parsedContent)) { parsedGroup = parsedGroup ?? new MediaRssGroup(); parsedGroup.Contents.Add(parsedContent); } } // container ParseMediaRssContainer(groupElement, ns, extensionManifestDirectory, ref parsedGroup); if (parsedGroup == null) { return(false); } // extensions ExtensibleEntityParser.ParseXElementExtensions(groupElement, extensionManifestDirectory, parsedGroup); return(true); }
private static bool TryParseRss20Image(XElement imageElement, ExtensionManifestDirectory extensionManifestDirectory, out Rss20Image parsedImage) { parsedImage = default; if (imageElement == null) { return(false); } parsedImage = new Rss20Image(); parsedImage.Url = imageElement.Element("url")?.Value.Trim(); parsedImage.Title = imageElement.Element("title")?.Value.Trim(); parsedImage.Link = imageElement.Element("link")?.Value.Trim(); parsedImage.Description = imageElement.Element("description")?.Value.Trim(); if (int.TryParse(imageElement.Element("width")?.Value.Trim(), NumberStyles.Any, CultureInfo.InvariantCulture, out var parsedWidth)) { parsedImage.Width = parsedWidth; } if (int.TryParse(imageElement.Element("height")?.Value.Trim(), NumberStyles.Any, CultureInfo.InvariantCulture, out var parsedHeight)) { parsedImage.Height = parsedHeight; } // extensions ExtensibleEntityParser.ParseXElementExtensions(imageElement, extensionManifestDirectory, parsedImage); return(true); }
private static bool TryParseRss20Item(XElement itemElement, ExtensionManifestDirectory extensionManifestDirectory, out Rss20Item parsedItem) { parsedItem = default; if (itemElement == null) { return(false); } parsedItem = new Rss20Item(); parsedItem.Title = itemElement.Element("title")?.Value.Trim(); parsedItem.Link = itemElement.Element("link")?.Value.Trim(); parsedItem.Description = itemElement.Element("description")?.Value.Trim(); parsedItem.Author = itemElement.Element("author")?.Value.Trim(); parsedItem.Comments = itemElement.Element("comments")?.Value.Trim(); foreach (var categoryElement in itemElement.Elements("category")) { if (TryParseRss20Category(categoryElement, out var parsedCategory)) { parsedItem.Categories.Add(parsedCategory); } } foreach (var enclosureElement in itemElement.Elements("enclosure")) { if (TryParseRss20Enclosure(enclosureElement, out var parsedEnclosure)) { parsedItem.Enclosures.Add(parsedEnclosure); } } if (TryParseRss20Timestamp(itemElement.Element("pubDate"), out var parsedPubDate)) { parsedItem.PubDate = parsedPubDate; } if (TryParseRss20Source(itemElement.Element("source"), out var parsedSource)) { parsedItem.Source = parsedSource; } if (TryParseRss20Guid(itemElement.Element("guid"), out var parsedGuid)) { parsedItem.Guid = parsedGuid; } // extensions ExtensibleEntityParser.ParseXElementExtensions(itemElement, extensionManifestDirectory, parsedItem); return(true); }
private static bool TryParseRss10Image(XElement imageElement, XNamespace rss, ExtensionManifestDirectory extensionManifestDirectory, out Rss10Image parsedImage) { parsedImage = default; if (imageElement == null) { return(false); } parsedImage = new Rss10Image(); parsedImage.About = imageElement.Attribute(_rdf + "about")?.Value; parsedImage.Title = imageElement.Element(rss + "title")?.Value.Trim(); parsedImage.Url = imageElement.Element(rss + "url")?.Value.Trim(); parsedImage.Link = imageElement.Element(rss + "link")?.Value.Trim(); // extensions ExtensibleEntityParser.ParseXElementExtensions(imageElement, extensionManifestDirectory, parsedImage); return(true); }
private static bool TryParseRss10Channel(XElement channelElement, XNamespace rss, ExtensionManifestDirectory extensionManifestDirectory, out Rss10Channel parsedChannel) { parsedChannel = default; if (channelElement == null) { return(false); } parsedChannel = new Rss10Channel(); parsedChannel.About = channelElement.Attribute(_rdf + "about")?.Value; parsedChannel.Title = channelElement.Element(rss + "title")?.Value.Trim(); parsedChannel.Link = channelElement.Element(rss + "link")?.Value.Trim(); parsedChannel.Description = channelElement.Element(rss + "description")?.Value.Trim(); // extensions ExtensibleEntityParser.ParseXElementExtensions(channelElement, extensionManifestDirectory, parsedChannel); return(true); }
private static bool TryParseRss10Item(XElement itemElement, XNamespace rss, ExtensionManifestDirectory extensionManifestDirectory, out Rss10Item parsedItem) { parsedItem = default; if (itemElement == null) { return(false); } parsedItem = new Rss10Item(); parsedItem.About = itemElement.Attribute(_rdf + "about")?.Value; parsedItem.Title = itemElement.Element(rss + "title")?.Value.Trim(); parsedItem.Link = itemElement.Element(rss + "link")?.Value.Trim(); parsedItem.Description = itemElement.Element(rss + "description")?.Value.Trim(); // extensions ExtensibleEntityParser.ParseXElementExtensions(itemElement, extensionManifestDirectory, parsedItem); return(true); }
private static bool TryParseRss20TextInput(XElement textInputElement, ExtensionManifestDirectory extensionManifestDirectory, out Rss20TextInput parsedTextInput) { parsedTextInput = default; if (textInputElement == null) { return(false); } parsedTextInput = new Rss20TextInput(); parsedTextInput.Title = textInputElement.Element("title")?.Value.Trim(); parsedTextInput.Description = textInputElement.Element("description")?.Value.Trim(); parsedTextInput.Name = textInputElement.Element("name")?.Value.Trim(); parsedTextInput.Link = textInputElement.Element("link")?.Value.Trim(); // extensions ExtensibleEntityParser.ParseXElementExtensions(textInputElement, extensionManifestDirectory, parsedTextInput); return(true); }
private static bool TryParseMediaRssLocation(XElement locationElement, ExtensionManifestDirectory extensionManifestDirectory, out MediaRssLocation parsedLocation) { parsedLocation = default; if (locationElement == null) { return(false); } if (TryParseTimeSpanAttribute(locationElement.Attribute("start"), out var parsedStart)) { // ReSharper disable once ConstantNullCoalescingCondition parsedLocation = parsedLocation ?? new MediaRssLocation(); parsedLocation.Start = parsedStart; } if (TryParseTimeSpanAttribute(locationElement.Attribute("end"), out var parsedEnd)) { parsedLocation = parsedLocation ?? new MediaRssLocation(); parsedLocation.End = parsedEnd; } if (TryParseStringAttribute(locationElement.Attribute("description"), out var parsedDescription)) { parsedLocation = parsedLocation ?? new MediaRssLocation(); parsedLocation.Description = parsedDescription; } var emptyBeforeExtensions = parsedLocation == null; // extensions parsedLocation = parsedLocation ?? new MediaRssLocation(); ExtensibleEntityParser.ParseXElementExtensions(locationElement, extensionManifestDirectory, parsedLocation); if (emptyBeforeExtensions && !parsedLocation.Extensions.Any()) { return(false); } return(true); }
public static bool TryParseAtom10Feed(XDocument document, out Atom10Feed parsedFeed, ExtensionManifestDirectory extensionManifestDirectory = null) { parsedFeed = default; XElement feedElement = null; XNamespace atom = null; foreach (var ns in Atom10Constants.RecognizedNamespaces) { atom = ns; feedElement = document?.Element(atom + "feed"); if (feedElement != null) { break; } } if (feedElement == null) { return(false); } if (extensionManifestDirectory == null) { extensionManifestDirectory = ExtensionManifestDirectory.DefaultForAtom; } parsedFeed = new Atom10Feed(); parsedFeed.Lang = feedElement.Attribute(_xml + "lang")?.Value; parsedFeed.Base = feedElement.Attribute(_xml + "base")?.Value; parsedFeed.Id = feedElement.Element(atom + "id")?.Value.Trim(); if (TryParseAtom10Text(feedElement.Element(atom + "title"), out var parsedTitle)) { parsedFeed.Title = parsedTitle; } if (TryParseAtom10Timestamp(feedElement.Element(atom + "updated"), out var parsedUpdated)) { parsedFeed.Updated = parsedUpdated; } foreach (var authorElement in feedElement.Elements(atom + "author")) { if (TryParseAtom10Person(authorElement, atom, out var parsedPerson)) { parsedFeed.Authors.Add(parsedPerson); } } foreach (var linkElement in feedElement.Elements(atom + "link")) { if (TryParseAtom10Link(linkElement, out var parsedLink)) { parsedFeed.Links.Add(parsedLink); } } foreach (var categoryElement in feedElement.Elements(atom + "category")) { if (TryParseAtom10Category(categoryElement, out var parsedCategory)) { parsedFeed.Categories.Add(parsedCategory); } } foreach (var contributorElement in feedElement.Elements(atom + "contributor")) { if (TryParseAtom10Person(contributorElement, atom, out var parsedPerson)) { parsedFeed.Contributors.Add(parsedPerson); } } if (TryParseAtom10Generator(feedElement.Element(atom + "generator"), out var parsedGenerator)) { parsedFeed.Generator = parsedGenerator; } parsedFeed.Icon = feedElement.Element(atom + "icon")?.Value.Trim(); parsedFeed.Logo = feedElement.Element(atom + "logo")?.Value.Trim(); if (TryParseAtom10Text(feedElement.Element(atom + "rights"), out var parsedRights)) { parsedFeed.Rights = parsedRights; } if (TryParseAtom10Text(feedElement.Element(atom + "subtitle"), out var parsedSubtitle)) { parsedFeed.Subtitle = parsedSubtitle; } // entries foreach (var entryElement in feedElement.Elements(atom + "entry")) { if (TryParseAtom10Entry(entryElement, atom, extensionManifestDirectory, out var parsedEntry)) { parsedFeed.Entries.Add(parsedEntry); } } // extensions ExtensibleEntityParser.ParseXElementExtensions(feedElement, extensionManifestDirectory, parsedFeed); return(true); }
private static bool TryParseAtom10Entry(XElement entryElement, XNamespace atom, ExtensionManifestDirectory extensionManifestDirectory, out Atom10Entry parsedEntry) { parsedEntry = default; if (entryElement == null) { return(false); } parsedEntry = new Atom10Entry(); parsedEntry.Id = entryElement.Element(atom + "id")?.Value.Trim(); if (TryParseAtom10Text(entryElement.Element(atom + "title"), out var parsedTitle)) { parsedEntry.Title = parsedTitle; } if (TryParseAtom10Timestamp(entryElement.Element(atom + "updated"), out var parsedUpdated)) { parsedEntry.Updated = parsedUpdated; } foreach (var authorElement in entryElement.Elements(atom + "author")) { if (TryParseAtom10Person(authorElement, atom, out var parsedPerson)) { parsedEntry.Authors.Add(parsedPerson); } } if (TryParseAtom10Content(entryElement.Element(atom + "content"), out var parsedContent)) { parsedEntry.Content = parsedContent; } foreach (var linkElement in entryElement.Elements(atom + "link")) { if (TryParseAtom10Link(linkElement, out var parsedLink)) { parsedEntry.Links.Add(parsedLink); } } if (TryParseAtom10Text(entryElement.Element(atom + "summary"), out var parsedSummary)) { parsedEntry.Summary = parsedSummary; } foreach (var categoryElement in entryElement.Elements(atom + "category")) { if (TryParseAtom10Category(categoryElement, out var parsedCategory)) { parsedEntry.Categories.Add(parsedCategory); } } foreach (var contributorElement in entryElement.Elements(atom + "contributor")) { if (TryParseAtom10Person(contributorElement, atom, out var parsedPerson)) { parsedEntry.Contributors.Add(parsedPerson); } } if (TryParseAtom10Timestamp(entryElement.Element(atom + "published"), out var parsedPublished)) { parsedEntry.Published = parsedPublished; } if (TryParseAtom10Text(entryElement.Element(atom + "rights"), out var parsedRights)) { parsedEntry.Rights = parsedRights; } if (TryParseAtom10Source(entryElement.Element(atom + "source"), atom, out var parsedSource)) { parsedEntry.Source = parsedSource; } // extensions ExtensibleEntityParser.ParseXElementExtensions(entryElement, extensionManifestDirectory, parsedEntry); return(true); }
private static bool TryParseMediaRssContent(XElement contentElement, XNamespace ns, ExtensionManifestDirectory extensionManifestDirectory, out MediaRssContent parsedContent) { parsedContent = null; if (contentElement == null) { return(false); } // content fields if (TryParseStringAttribute(contentElement.Attribute("url"), out var parsedUrl)) { // ReSharper disable once ConstantNullCoalescingCondition parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.Url = parsedUrl; } if (TryParseIntegerAttribute(contentElement.Attribute("fileSize"), out var parsedFileSize)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.FileSize = parsedFileSize; } if (TryParseStringAttribute(contentElement.Attribute("type"), out var parsedType)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.Type = parsedType; } if (TryParseEnumAttribute <MediaRssMedium>(contentElement.Attribute("medium"), out var parsedMedium)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.Medium = parsedMedium; } if (TryParseBoolAttribute(contentElement.Attribute("isDefault"), out var parsedIsDefault)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.IsDefault = parsedIsDefault; } if (TryParseEnumAttribute <MediaRssExpression>(contentElement.Attribute("expression"), out var parsedExpression)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.Expression = parsedExpression; } if (TryParseDoubleAttribute(contentElement.Attribute("bitrate"), out var parsedBitRate)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.BitRate = parsedBitRate; } if (TryParseDoubleAttribute(contentElement.Attribute("framerate"), out var parsedFrameRate)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.FrameRate = parsedFrameRate; } if (TryParseDoubleAttribute(contentElement.Attribute("samplingrate"), out var parsedSamplingRate)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.SamplingRate = parsedSamplingRate; } if (TryParseIntegerAttribute(contentElement.Attribute("channels"), out var parsedChannels)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.Channels = parsedChannels; } if (TryParseTimeSpanAttribute(contentElement.Attribute("duration"), out var parsedDuration)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.Duration = parsedDuration; } if (TryParseIntegerAttribute(contentElement.Attribute("height"), out var parsedHeight)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.Height = parsedHeight; } if (TryParseIntegerAttribute(contentElement.Attribute("width"), out var parsedWidth)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.Width = parsedWidth; } if (TryParseStringAttribute(contentElement.Attribute("lang"), out var parsedLang)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.Lang = parsedLang; } // container ParseMediaRssContainer(contentElement, ns, extensionManifestDirectory, ref parsedContent); if (parsedContent == null) { return(false); } // extensions ExtensibleEntityParser.ParseXElementExtensions(contentElement, extensionManifestDirectory, parsedContent); 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); }