Пример #1
0
        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);
        }
Пример #2
0
        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);
        }