コード例 #1
0
        public List<BannerItem> FbItems()
        {
            Atom10FeedFormatter formatter = new Atom10FeedFormatter();

            using (XmlReader reader = XmlReader.Create(ConfigurationManager.AppSettings["FacebookFeed"]))
            {
                formatter.ReadFrom(reader);
            }

            var bannerItems = new List<BannerItem>();

            foreach (var e in formatter.Feed.Items)
            {
                if (!e.Title.Text.StartsWith("Wallflux"))
                {
                    BannerItem le = new BannerItem();
                    le.title = e.Title.Text;
                    le.content = new entryContent
                    {
                        Value = ((TextSyndicationContent)e.Content).Text
                    };

                    le.link = new entryLink
                    {
                        href = e.Id,
                        target = "_blank"
                    };
                    le.updated = e.LastUpdatedTime.DateTime.ToShortDateString();
                    le.published = "Published on facebook "+e.PublishDate.DateTime.ToShortDateString();
                    le.TypeOfContent = Enum.GetName(typeof(TypeOfContent), TypeOfContent.FacebookPost);
                    bannerItems.Add(le);
                }
            }
            return bannerItems;

            /* sparas, extrahera bilder
            List<RssFeedItem> rssItems = new List<RssFeedItem>();
                    Stream stream = e.Result;
                    XmlReader response = XmlReader.Create(stream);
                    SyndicationFeed feeds = SyndicationFeed.Load(response);
                    foreach (SyndicationItem f in feeds.Items)
                    {
                        RssFeedItem rssItem = new RssFeedItem();

                        rssItem.Description = f.Summary.Text;

             const string rx =  @"(?<=img\s+src\=[\x27\x22])(?<Url>[^\x27\x22]*)(?=[\x27\x22])";
                        foreach (Match m in Regex.Matches(f.Summary.Text, rx, RegexOptions.IgnoreCase | RegexOptions.Multiline))
                        {
                            string src = m.Groups[1].Value;
                            if (src.StartsWith("//")) // Google RSS has it
                            {
                                src = src.Replace("//", "http://");
                            }

                            rssItem.ImageLinks.Add(src);
                        }

            */
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: simplyvinay/feedreader
        public static IList<Feed> GetFeeds()
        {
            var urls = new[]
                {
                    "http://www.simplyvinay.com/GetBlogRss.aspx", "http://www.bbc.co.uk/blogs/formula1/rss.xml",
                    "http://feeds.feedburner.com/AyendeRahien"
                };
            var list = new List<Feed>();

            foreach (var url in urls)
            {
                using (var reader = new CustomXmlReader(url))
                {
                    if (reader.ReadState == ReadState.Initial)
                        reader.MoveToContent();

                    var atom = new Atom10FeedFormatter();
                    if (atom.CanRead(reader))
                    {
                        atom.ReadFrom(reader);
                        list.AddRange(GenerateFeed(atom.Feed, true));
                    }

                    var rss = new Rss20FeedFormatter();
                    if (rss.CanRead(reader))
                    {
                        rss.ReadFrom(reader);
                        list.AddRange(GenerateFeed(rss.Feed, false));
                    }
                }
            }
            return list;
        }
コード例 #3
0
ファイル: Default.aspx.cs プロジェクト: 1342MPA/CourseProject
 public void fload(string namefile)
 {
         var lines = System.IO.File.ReadAllLines(namefile);
         feed.Title = new TextSyndicationContent(lines[1]);
         feed.Copyright = new TextSyndicationContent(lines[2]);
         feed.Description = new TextSyndicationContent(lines[3]);
         feed.Generator = lines[4];
         SyndicationLink link = new SyndicationLink();
         link.Uri = new Uri(lines[5]);
         feed.Links.Add(link);
         feed.Items = txtgotolv("feedinfo.txt");
         Response.Clear();
         Response.ContentEncoding = System.Text.Encoding.UTF8;
         Response.ContentType = "text/xml";
         XmlWriter Writer = XmlWriter.Create
         (Response.Output);
         if (lines[0] == "rss")
         {
             Rss20FeedFormatter Formatter = new Rss20FeedFormatter(feed);
             Formatter.WriteTo(Writer);
         }
         else
         {
             if (lines[0] == "atom")
             {
                 Atom10FeedFormatter Formatter = new Atom10FeedFormatter(feed);
                 Formatter.WriteTo(Writer);
             }
         }
         Writer.Close();
         Response.End();
 }
コード例 #4
0
        public SyndicationFeedFormatter CreateFeed()
        {
            string serverUrl = ConfigurationManager.AppSettings["CatMyVideoUrl"];
            // Create a new Syndication Feed.
            SyndicationFeed feed = new SyndicationFeed();

            feed.Id = "#CatMyVideo URL";

            List<SyndicationItem> items = new List<SyndicationItem>();

            feed.Title = new TextSyndicationContent("Last trends on CatMyVideo");
            feed.Description = new TextSyndicationContent(String.Format("Todays' top {0} hottest videos on CatMyVideo", MAXVIDEO));
            feed.Copyright = new TextSyndicationContent("Copy/Paste rights CatMyVideo");
            feed.Generator = "CatMyVideo RSS Feeder 1.0";
            feed.Authors.Add(new SyndicationPerson("*****@*****.**"));

            feed.LastUpdatedTime = new DateTimeOffset(DateTime.Now);

            var trendingVideos = Engine.BusinessManagement.Video.ListVideos(Engine.Dbo.Video.Order.UploadDate, false, MAXVIDEO, 0, true);
            for (int i = 0; i < trendingVideos.Count; i++)
            {
                SyndicationItem item = new SyndicationItem();

                string itemUrl = serverUrl + "/Video/Display/" + trendingVideos[i].Id;
                item.Id = itemUrl;

                var itemLink = new SyndicationLink(new Uri(itemUrl));
                itemLink.MediaType = "text/html";
                itemLink.Title = "Watch me !";
                item.Links.Add(itemLink);

                string htmlContent = String.Format("<!DOCTYPE html><html><head></head><body><h1>{0}</h1><p>{1}</p><a href=\"{2}\">Check this out !</a></body></html>",
                                                    trendingVideos[i].Title,
                                                    trendingVideos[i].Description,
                                                    itemUrl);
                TextSyndicationContent content = new TextSyndicationContent(htmlContent, TextSyndicationContentKind.Html);

                // Fill some properties for the item
                item.Title = new TextSyndicationContent("#" + (i + 1));
                item.LastUpdatedTime = DateTime.Now;
                item.PublishDate = trendingVideos[i].UploadDate;

                item.Content = content;
                items.Add(item);
            }
            feed.Items = items;

            string query = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["format"];
            SyndicationFeedFormatter formatter = null;
            if (query == "atom")
            {
                formatter = new Atom10FeedFormatter(feed);
            }
            else
            {
                formatter = new Rss20FeedFormatter(feed);
            }

            return formatter;
        }
コード例 #5
0
ファイル: Feed1.cs プロジェクト: camilleblondie/tekconf
        public SyndicationFeedFormatter CreateFeed()
        {
            // Créez un flux RSS.
            SyndicationFeed feed = new SyndicationFeed("TekConf Event", "Last 10 event added in TekConf", null);
            List<SyndicationItem> items = TekConf.DataAccess.Event.GetLastEventsList(10).Select(
                e => new SyndicationItem("idEvent :  " + e.id + " : " + e.name,
                    e.location + ", " + e.time + " \n " + e.Technology + " \n " + e.description,
                    null)
                ).ToList();
            feed.Items = items;

            // Renvoie ATOM ou RSS en fonction de la chaîne de requête
            // rss -> http://localhost:8733/Design_Time_Addresses/SyndicationServiceLibrary1/Feed1/
            // atom -> http://localhost:8733/Design_Time_Addresses/SyndicationServiceLibrary1/Feed1/?format=atom
            string query = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["format"];
            SyndicationFeedFormatter formatter = null;
            if (query == "atom")
            {
                formatter = new Atom10FeedFormatter(feed);
            }
            else
            {
                formatter = new Rss20FeedFormatter(feed);
            }

            return formatter;
        }
 public Atom10ItemFormatter(SyndicationItem itemToWrite) : base(itemToWrite)
 {
     this.feedSerializer = new Atom10FeedFormatter();
     this.feedSerializer.PreserveAttributeExtensions = this.preserveAttributeExtensions = true;
     this.feedSerializer.PreserveElementExtensions = this.preserveElementExtensions = true;
     this.itemType = itemToWrite.GetType();
 }
コード例 #7
0
ファイル: Feed.cs プロジェクト: ThomasCOLLIN/dotNET
        public SyndicationFeedFormatter CreateFeedForBlog(string user, string blog)
        {
            SyndicationFeed feed = new SyndicationFeed("Blog feed", "A feed linked to a blog", null);
            List<SyndicationItem> items = new List<SyndicationItem>();
            List<Dbo.RssArticle> articles = BusinessManagement.Feed.GetBlogContent(user, blog);

            foreach (Dbo.RssArticle article in articles)
            {
                SyndicationItem item = new SyndicationItem(article.Title, article.Content, null);
                item.PublishDate = article.CreationDate;
                items.Add(item);
            }
            feed.Items = items;

            // Renvoie ATOM ou RSS en fonction de la chaîne de requête
            // rss -> http://localhost:8733/Design_Time_Addresses/FluxRss/Feed1/
            // atom -> http://localhost:8733/Design_Time_Addresses/FluxRss/Feed1/?format=atom
            string query = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["format"];
            SyndicationFeedFormatter formatter = null;
            if (query == "atom")
            {
                formatter = new Atom10FeedFormatter(feed);
            }
            else
            {
                formatter = new Rss20FeedFormatter(feed);
            }

            return formatter;
        }
コード例 #8
0
        public string Build(FeedData dataFeed, Uri baseUri)
        {
            var feed = new SyndicationFeed
            {
                Id = dataFeed.Id.ToString(),
                LastUpdatedTime = dataFeed.DateCreated,
                Items = dataFeed.Messages.Select(x => new SyndicationItem
                {
                    Content = new RawSyndicationContent(x.Body),
                    Id = x.Id.ToString(),
                    LastUpdatedTime = x.CreatedAt
                })
            };

            if (!string.IsNullOrEmpty(dataFeed.NextUri))
                feed.Links.Add(new SyndicationLink(new Uri(baseUri, dataFeed.NextUri), NextInArchiveRelationshipType,
                    "Next In Archive", ContentType, 0));

            if (!string.IsNullOrEmpty(dataFeed.PreviousUri))
                feed.Links.Add(new SyndicationLink(new Uri(baseUri, dataFeed.PreviousUri), PrevInArchiveRelationshipType,
                    "Previous In Archive", ContentType, 0));

            var formatter = new Atom10FeedFormatter(feed);

            var sw = new StringWriter();
            using (var writer = XmlWriter.Create(sw))
            {
                formatter.WriteTo(writer);
            }

            return sw.ToString();
        }
コード例 #9
0
ファイル: Feed1.cs プロジェクト: yoan-durand/TP
        public SyndicationFeedFormatter CreateFeed()
        {
            // Create a new Syndication Feed.
            SyndicationFeed feed = new SyndicationFeed("Bug Track", "Flux rss du bug track", null);
            List<SyndicationItem> items = new List<SyndicationItem>();

            // Create a new Syndication Item.

            List<DBO.Bug> list = BusinessManagement.Bug.GetLastBug(10);

            foreach (DBO.Bug itemBug in list)
            {
                SyndicationItem item = new SyndicationItem(itemBug.ProjectName + " : " + itemBug.Title, itemBug.CreateDate + " \n " + itemBug.Details, null);
                items.Add(item);
            }

            feed.Items = items;

            // Return ATOM or RSS based on query string
            // rss -> http://localhost:8731/Design_Time_Addresses/SyndicationServiceBugTrack/Feed1/
            // atom -> http://localhost:8731/Design_Time_Addresses/SyndicationServiceBugTrack/Feed1/?format=atom
            string query = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["format"];
            SyndicationFeedFormatter formatter = null;
            if (query == "atom")
            {
                formatter = new Atom10FeedFormatter(feed);
            }
            else
            {
                formatter = new Rss20FeedFormatter(feed);
            }

            return formatter;
        }
コード例 #10
0
 public FeedData Build(string data, string url)
 {
     var formatter = new Atom10FeedFormatter();
     using (var reader = new StringReader(data))
     {
         using (var xmlReader = XmlReader.Create(reader))
         {
             formatter.ReadFrom(xmlReader);
             var feed = formatter.Feed;
             return new FeedData
             {
                 Id = Guid.Parse(feed.Id),
                 DateCreated = feed.LastUpdatedTime.UtcDateTime,
                 PreviousUri = GetUriFromLink(PrevInArchiveRelationshipType, feed),
                 NextUri = GetUriFromLink(NextInArchiveRelationshipType, feed),
                 Messages = feed.Items.Select(x =>
                 {
                     return new Message
                     {
                         Body = GetXmlString(x),
                         CreatedAt = x.LastUpdatedTime.UtcDateTime,
                         Id = Guid.Parse(x.Id),
                         FeedUri = url
                     };
                 }).ToArray()
             };
         }
     }
 }
コード例 #11
0
ファイル: AtomResponse.cs プロジェクト: horsdal/Sandra.Snow
        private Action<Stream> GetXmlContents(IEnumerable<Post> model)
        {
            var items = new List<SyndicationItem>();

            foreach (var post in model)
            {
                // Replace all relative urls with full urls.
                var contentHtml = Regex.Replace(post.Content, UrlRegex, m => siteUrl.TrimEnd('/') + "/" + m.Value.TrimStart('/'));
                var excerptHtml = Regex.Replace(post.ContentExcerpt, UrlRegex, m => siteUrl.TrimEnd('/') + "/" + m.Value.TrimStart('/'));

                var item = new SyndicationItem(
                    post.Title,
                    contentHtml,
                    new Uri(siteUrl + post.Url)
                    )
                {
                    Id = siteUrl + post.Url,
                    LastUpdatedTime = post.Date.ToUniversalTime(),
                    PublishDate = post.Date.ToUniversalTime(),
                    Content = new TextSyndicationContent(contentHtml, TextSyndicationContentKind.Html),
                    Summary = new TextSyndicationContent(excerptHtml, TextSyndicationContentKind.Html),
                };

                items.Add(item);
            }

            var feed = new SyndicationFeed(
                AtomTitle,
                AtomTitle, /* Using Title also as Description */
                new Uri(siteUrl + "/" + feedfileName),
                items)
                {
                    Id = siteUrl + "/",
                    LastUpdatedTime = new DateTimeOffset(DateTime.Now),
                    Generator = "Sandra.Snow Atom Generator"
                };
            feed.Authors.Add(new SyndicationPerson(authorEmail, author, siteUrl));

            var link = new SyndicationLink(new Uri(siteUrl + "/" + feedfileName))
            {
                RelationshipType = "self",
                MediaType = "text/html",
                Title = AtomTitle
            };
            feed.Links.Add(link);


            var formatter = new Atom10FeedFormatter(feed);

            return stream =>
            {
                var encoding = new UTF8Encoding(false);
                var streamWrapper = new UnclosableStreamWrapper(stream);

                using (var writer = new XmlTextWriter(streamWrapper, encoding))
                {
                    formatter.WriteTo(writer);
                }
            };
        }
コード例 #12
0
ファイル: Feed1.cs プロジェクト: hkuntal/MySociety
        public SyndicationFeedFormatter CreateFeed()
        {
            // Create a new Syndication Feed.
            SyndicationFeed feed = new SyndicationFeed("Feed Title", "A WCF Syndication Feed", null);
            List<SyndicationItem> items = new List<SyndicationItem>();

            // Create a new Syndication Item.
            SyndicationItem item = new SyndicationItem("An item", "Item content", null);
            items.Add(item);
            feed.Items = items;

            // Return ATOM or RSS based on query string
            // rss -> http://localhost:8733/Design_Time_Addresses/SyndicationServiceLibrary1/Feed1/
            // atom -> http://localhost:8733/Design_Time_Addresses/SyndicationServiceLibrary1/Feed1/?format=atom
            string query = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["format"];
            SyndicationFeedFormatter formatter = null;
            if (query == "atom")
            {
                formatter = new Atom10FeedFormatter(feed);
            }
            else
            {
                formatter = new Rss20FeedFormatter(feed);
            }

            return formatter;
        }
コード例 #13
0
ファイル: FeedController.cs プロジェクト: harpreet/TinyBlog
        public override void ExecuteResult(ControllerContext context)
        {
            SyndicationFeedFormatter formatter;
            string contentType;

            switch (_feedType)
            {
                case FeedType.Atom:
                    formatter = new Atom10FeedFormatter(_syndicationFeed);
                    contentType = "application/atom+xml";
                    break;
                case FeedType.Rss:
                    formatter = new Rss20FeedFormatter(_syndicationFeed);
                    contentType = "application/rss+xml";
                    break;
                default:
                    throw new NotImplementedException("Feed type not accounted for");
            }

            context.HttpContext.Response.ContentType = contentType;

            using (var writer = XmlWriter.Create(context.HttpContext.Response.Output))
            {
                formatter.WriteTo(writer);
            }
        }
コード例 #14
0
        public override void ExecuteResult(ControllerContext context)
        {
            context.HttpContext.Response.ContentType = "application/atom+xml";
            //check request is for Atom or RSS
            if (context.HttpContext.Request.QueryString["type"] != null && context.HttpContext.Request.QueryString["type"].ToString().ToLower() == "atom")
            {
                //Atom Feed
                context.HttpContext.Response.ContentType = "application/atom+xml";
                var rssFormatter = new Atom10FeedFormatter(FeedData);
                using (XmlWriter writer = XmlWriter.Create(context.HttpContext.Response.Output, new XmlWriterSettings { Indent = true }))
                {
                    rssFormatter.WriteTo(writer);
                }
            }
            else
            {
                //RSS Feed
                context.HttpContext.Response.ContentType = "application/rss+xml";
                var rssFormatter = new Rss20FeedFormatter(FeedData);
                using (XmlWriter writer = XmlWriter.Create(context.HttpContext.Response.Output, new XmlWriterSettings { Indent = true }))
                {
                    rssFormatter.WriteTo(writer);
                }
            }

        }
コード例 #15
0
ファイル: Feed1.cs プロジェクト: ThomasCOLLIN/TPs
        public SyndicationFeedFormatter CreateFeed()
        {
            // Créez un flux RSS.
            SyndicationFeed feed = new SyndicationFeed("Bug Track", "Flux rss du bug track", null);
            List<SyndicationItem> items = new List<SyndicationItem>();

            // Créez un article RSS.
            List<DBO.Bug> bugs = DataAccess.Bug.GetLastBug(10);
            bugs.ForEach(bug => items.Add(new SyndicationItem(bug.Title, bug.Details, null)));

            feed.Items = items;

            // Renvoie ATOM ou RSS en fonction de la chaîne de requête
            // rss -> http://localhost:8733/Design_Time_Addresses/SyndicationServiceBugTrack/Feed1/
            // atom -> http://localhost:8733/Design_Time_Addresses/SyndicationServiceBugTrack/Feed1/?format=atom
            string query = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["format"];
            SyndicationFeedFormatter formatter = null;
            if (query == "atom")
            {
                formatter = new Atom10FeedFormatter(feed);
            }
            else
            {
                formatter = new Rss20FeedFormatter(feed);
            }

            return formatter;
        }
コード例 #16
0
ファイル: RssResult.cs プロジェクト: lg31415/Graphite
 public override void ExecuteResult(ControllerContext context)
 {
     context.HttpContext.Response.ContentType = "application/atom+xml";
     var formatter = new Atom10FeedFormatter(Feed);
     using (XmlWriter writer = XmlWriter.Create(context.HttpContext.Response.Output))
         formatter.WriteTo(writer);
 }
コード例 #17
0
 //var formatter = new Rss20FeedFormatter(feed);
 //    Atom10FeedFormatter formatter = new Atom10FeedFormatter(feed);
 //using (var writer = XmlWriter.Create(response.Output, new XmlWriterSettings { Indent = true }))
 //{
 //    formatter.WriteTo(writer);
 //}
 protected override void WriteFile(HttpResponseBase response)
 {
     Atom10FeedFormatter formatter = new Atom10FeedFormatter(_feed);
     using (XmlWriter writer = XmlWriter.Create(response.OutputStream, new XmlWriterSettings { Indent = true }))
     {
         formatter.WriteTo(writer);
     }
 }
コード例 #18
0
        /// <summary>
        /// Gets an RSS feed from a given URL and returns the resulting XML as a string.
        /// </summary>
        /// <param name="url">URL of the feed to load.</param>
        /// <param name="count">The count of postings to return.</param>
        /// <returns>The feed XML as a string.</returns>
        public SyndicationFeed GetFeed(string url, int count)
        {
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.IgnoreWhitespace = true;
            settings.CheckCharacters = true;
            settings.CloseInput = true;
            settings.IgnoreComments = true;
            settings.IgnoreProcessingInstructions = true;
            settings.ProhibitDtd = false;

                using (XmlReader reader = XmlReader.Create(url, settings))
                {
                    SyndicationFeedFormatter formatter = null;
                    Atom10FeedFormatter atom = new Atom10FeedFormatter();
                    Rss20FeedFormatter rss = new Rss20FeedFormatter();
                    SyndicationFeed feed;

                    // Determine the format of the feed
                    if (reader.ReadState == ReadState.Initial)
                    {
                        reader.MoveToContent();
                    }

                    if (atom.CanRead(reader))
                    {
                        formatter = atom;
                    }

                    if (rss.CanRead(reader))
                    {
                        formatter = rss;
                    }

                    if (formatter == null)
                    {
                        return null;
                    }

                    formatter.ReadFrom(reader);
                    feed = formatter.Feed;

                    // Remove unwanted items
                    List<SyndicationItem> items = new List<SyndicationItem>();

                    int added = 0;

                    foreach (SyndicationItem i in feed.Items)
                    {
                        items.Add(i);

                        if (added++ == count - 1) break;
                    }

                    feed.Items = items;
                    return feed;
                }
        }
コード例 #19
0
 public override void OnWriteToStream(Type type, object value, Stream stream, HttpContentHeaders contentHeaders, TransportContext context)
 {
     var formatter = new Atom10FeedFormatter((SyndicationFeed) value);
     using (var xmlWriter = XmlWriter.Create(stream))
     {
         formatter.WriteTo(xmlWriter);
         xmlWriter.Close();
     }
 }
コード例 #20
0
 public Atom10ItemFormatter(SyndicationItem itemToWrite)
     : base(itemToWrite)
 {
     // No need to check that the parameter passed is valid - it is checked by the c'tor of the base class
     this.feedSerializer = new Atom10FeedFormatter();
     this.feedSerializer.PreserveAttributeExtensions = this.preserveAttributeExtensions = true;
     this.feedSerializer.PreserveElementExtensions = this.preserveElementExtensions = true;
     this.itemType = itemToWrite.GetType();
 }
コード例 #21
0
ファイル: AtomResponse.cs プロジェクト: jstclair/Rosanna
 private static Action<Stream> GetXmlContents(SyndicationFeed feed)
 {
     return stream =>
     {
         var writer = new XmlTextWriter(stream, Encoding.UTF8);
         var atomFormatter = new Atom10FeedFormatter(feed);
         atomFormatter.WriteTo(writer);
     };
 }
 public Rss20FeedFormatter(SyndicationFeed feedToWrite, bool serializeExtensionsAsAtom) : base(feedToWrite)
 {
     this.serializeExtensionsAsAtom = serializeExtensionsAsAtom;
     this.maxExtensionSize = 0x7fffffff;
     this.preserveElementExtensions = true;
     this.preserveAttributeExtensions = true;
     this.atomSerializer = new Atom10FeedFormatter(base.Feed);
     this.feedType = feedToWrite.GetType();
 }
コード例 #23
0
        internal static void LoadElementExtensions(XmlBuffer buffer, XmlDictionaryWriter writer, Workspace workspace)
        {
            if (workspace == null)
            {
                throw new ArgumentNullException(nameof(workspace));
            }
            Atom10FeedFormatter.CloseBuffer(buffer, writer);

            workspace.LoadElementExtensions(buffer);
        }
コード例 #24
0
        internal static void LoadElementExtensions(XmlBuffer buffer, XmlDictionaryWriter writer, ServiceDocument document)
        {
            if (document == null)
            {
                throw new ArgumentNullException(nameof(document));
            }
            Atom10FeedFormatter.CloseBuffer(buffer, writer);

            document.LoadElementExtensions(buffer);
        }
コード例 #25
0
        internal static void LoadElementExtensions(XmlBuffer buffer, XmlDictionaryWriter writer, ResourceCollectionInfo collection)
        {
            if (collection == null)
            {
                throw new ArgumentNullException(nameof(collection));
            }
            Atom10FeedFormatter.CloseBuffer(buffer, writer);

            collection.LoadElementExtensions(buffer);
        }
コード例 #26
0
        internal static void LoadElementExtensions(XmlBuffer buffer, XmlDictionaryWriter writer, CategoriesDocument categories)
        {
            if (categories == null)
            {
                throw new ArgumentNullException(nameof(categories));
            }
            Atom10FeedFormatter.CloseBuffer(buffer, writer);

            categories.LoadElementExtensions(buffer);
        }
コード例 #27
0
 public Rss20FeedFormatter(SyndicationFeed feedToWrite, bool serializeExtensionsAsAtom)
     : base(feedToWrite)
 {
     // No need to check that the parameter passed is valid - it is checked by the c'tor of the base class
     this.serializeExtensionsAsAtom = serializeExtensionsAsAtom;
     this.maxExtensionSize = int.MaxValue;
     this.preserveElementExtensions = true;
     this.preserveAttributeExtensions = true;
     this.atomSerializer = new Atom10FeedFormatter(this.Feed);
     this.feedType = feedToWrite.GetType();
 }
コード例 #28
0
        private static UpdateCheck CheckForUpdates(string feedUrl, Version currentVersion)
        {
            var r = new UpdateCheck();
            r.Message = "";
            // NOTE: Requires a reference to System.ServiceModel.dll
            var formatter = new Atom10FeedFormatter();
            try
            {
                // Read the feed
                using (var reader = System.Xml.XmlReader.Create(feedUrl))
                {
                    formatter.ReadFrom(reader);

                    var latest = (from i in formatter.Feed.Items
                                  where i.Categories.Any(c => IsStable(c.Name))
                                  orderby i.LastUpdatedTime descending
                                  select i).FirstOrDefault();

                    if (latest != null)
                    {
                        var u = latest.Links.Single().Uri.AbsoluteUri;
                        r.Message += String.Format("The latest release is: {0}\n", u);

                        var update = (from i in formatter.Feed.Items
                                      where ExtractVersion(i.Title.Text) > currentVersion &&
                                      i.Categories.Any(c => IsStable(c.Name))
                                      orderby i.LastUpdatedTime descending
                                      select i).FirstOrDefault();

                        if (update != null)
                        {
                            // TODO: Notify user of available download
                            var downloadUrl = update.Links.Single().Uri.AbsoluteUri;
                            r.Message += String.Format("There is an available update: {0}",
                                                       update.Title.Text);
                            r.UpdateAvailable = true;
                        }
                        else
                        {
                            r.Message += "There is no later version.";
                        }
                    }
                    else
                    {
                        r.Message += "Could not find a later version.";
                    }
                }
            }
            catch (System.Exception exc1)
            {
                r.Message += "Cannot check for updates. " + exc1.ToString();
            }
            return r;
        }
コード例 #29
0
ファイル: FeedResult.cs プロジェクト: takepara/RazorDoIt
        public override void ExecuteResult(ControllerContext context)
        {
            context.HttpContext.Response.ContentType = _feedContentType[Format];

            SyndicationFeedFormatter formatter = null;
            if (Format == FeedFormat.Atom)
                formatter = new Atom10FeedFormatter(Feed);
            else
                formatter = new Rss20FeedFormatter(Feed);
            using (var writer = XmlWriter.Create(context.HttpContext.Response.Output))
            {
                formatter.WriteTo(writer);
            }
        }
コード例 #30
0
 public static StreamContent CreateContentFromAtom10SyndicationFeed(SyndicationFeed feed)
 {
     SyndicationFeedFormatter formatter = new Atom10FeedFormatter<SyndicationFeed>(feed);
     var memoryStream = new MemoryStream();
     var settings = new XmlWriterSettings { Encoding = Encoding.UTF8, ConformanceLevel = ConformanceLevel.Document, Indent = true };
     using (var xmlWriter = XmlWriter.Create(memoryStream, settings))
     {
         formatter.WriteTo(xmlWriter);
         xmlWriter.Flush();
         xmlWriter.Close();
     }
     memoryStream.Seek(0, SeekOrigin.Begin);
     return new StreamContent(memoryStream);
 }
コード例 #31
0
        public static void AtomFeed()
        {
            Atom10FeedFormatter formatter = new Atom10FeedFormatter();
            using (XmlReader reader = XmlReader.Create("https://www.wunschliste.de/xml/atom.pl?user_id=1125047&key=1355167046072"))
            {
                formatter.ReadFrom(reader);
            }

            foreach (SyndicationItem item in formatter.Feed.Items)
            {
                //Console.WriteLine("[{0}][{1}] {2}", item.PublishDate, item.Title.Text, ((TextSyndicationContent)item.Content).Text);
            }

            Console.ReadLine();
        }
コード例 #32
0
 public Atom10ItemFormatter(Type itemTypeToCreate)
 {
     if (itemTypeToCreate == null)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("itemTypeToCreate");
     }
     if (!typeof(SyndicationItem).IsAssignableFrom(itemTypeToCreate))
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("itemTypeToCreate", System.ServiceModel.SR.GetString("InvalidObjectTypePassed", new object[] { "itemTypeToCreate", "SyndicationItem" }));
     }
     this.feedSerializer = new Atom10FeedFormatter();
     this.feedSerializer.PreserveAttributeExtensions = this.preserveAttributeExtensions = true;
     this.feedSerializer.PreserveElementExtensions   = this.preserveElementExtensions = true;
     this.itemType = itemTypeToCreate;
 }
 public Atom10ItemFormatter(Type itemTypeToCreate)
 {
     if (itemTypeToCreate == null)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("itemTypeToCreate");
     }
     if (!typeof(SyndicationItem).IsAssignableFrom(itemTypeToCreate))
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("itemTypeToCreate", System.ServiceModel.SR.GetString("InvalidObjectTypePassed", new object[] { "itemTypeToCreate", "SyndicationItem" }));
     }
     this.feedSerializer = new Atom10FeedFormatter();
     this.feedSerializer.PreserveAttributeExtensions = this.preserveAttributeExtensions = true;
     this.feedSerializer.PreserveElementExtensions = this.preserveElementExtensions = true;
     this.itemType = itemTypeToCreate;
 }
コード例 #34
0
        internal static TSyndicationFeed LoadFeed <TSyndicationFeed> (XmlReader reader) where TSyndicationFeed : SyndicationFeed, new()
        {
            switch (DetectVersion(reader, ReaderKind.Feed))
            {
            case SyndicationVersions.Atom10:
                Atom10FeedFormatter af = new Atom10FeedFormatter <TSyndicationFeed> ();
                af.ReadFrom(reader);
                return((TSyndicationFeed)af.Feed);

            case SyndicationVersions.Rss20:
            default:             // anything else are rejected by DetectVersion
                Rss20FeedFormatter rf = new Rss20FeedFormatter <TSyndicationFeed> ();
                rf.ReadFrom(reader);
                return((TSyndicationFeed)rf.Feed);
            }
        }
コード例 #35
0
        public async Task<Update> CheckForUpdatesAsync(string updateUrl, UpdateFilter updateFilter)
        {
            Debug.Assert(!String.IsNullOrWhiteSpace(updateUrl));

            var reader = XmlReader.Create(updateUrl);
            var formatter = new Atom10FeedFormatter();

            await formatter.ReadFromAsync(reader);

            return (from i in formatter.Feed.Items
                    let u = UpdateHelper.FromSyndicationItem(i)
                    where u.Version > Assembly.GetExecutingAssembly().GetName().Version
                        && ((int)updateFilter & (int)u.ReleaseStatus) != 0
                    orderby u.LastUpdatedTime descending
                    select u).FirstOrDefault();
        }
コード例 #36
0
 public Atom10ItemFormatter(Type itemTypeToCreate)
     : base()
 {
     if (itemTypeToCreate == null)
     {
         throw new ArgumentNullException(nameof(itemTypeToCreate));
     }
     if (!typeof(SyndicationItem).IsAssignableFrom(itemTypeToCreate))
     {
         throw new ArgumentException(string.Format(SR.InvalidObjectTypePassed, nameof(itemTypeToCreate), nameof(SyndicationItem)));
     }
     _feedSerializer = new Atom10FeedFormatter();
     _feedSerializer.PreserveAttributeExtensions = _preserveAttributeExtensions = true;
     _feedSerializer.PreserveElementExtensions   = _preserveElementExtensions = true;
     _itemType = itemTypeToCreate;
 }
コード例 #37
0
 public Atom10ItemFormatter(Type itemTypeToCreate)
     : base()
 {
     if (itemTypeToCreate == null)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("itemTypeToCreate");
     }
     if (!typeof(SyndicationItem).IsAssignableFrom(itemTypeToCreate))
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("itemTypeToCreate",
                                                                      SR.Format(SR.InvalidObjectTypePassed, "itemTypeToCreate", "SyndicationItem"));
     }
     _feedSerializer = new Atom10FeedFormatter();
     _feedSerializer.PreserveAttributeExtensions = _preserveAttributeExtensions = true;
     _feedSerializer.PreserveElementExtensions   = _preserveElementExtensions = true;
     _itemType = itemTypeToCreate;
 }
 public Rss20FeedFormatter(Type feedTypeToCreate)
 {
     if (feedTypeToCreate == null)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("feedTypeToCreate");
     }
     if (!typeof(SyndicationFeed).IsAssignableFrom(feedTypeToCreate))
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("feedTypeToCreate", System.ServiceModel.SR.GetString("InvalidObjectTypePassed", new object[] { "feedTypeToCreate", "SyndicationFeed" }));
     }
     this.serializeExtensionsAsAtom = true;
     this.maxExtensionSize = 0x7fffffff;
     this.preserveElementExtensions = true;
     this.preserveAttributeExtensions = true;
     this.atomSerializer = new Atom10FeedFormatter(feedTypeToCreate);
     this.feedType = feedTypeToCreate;
 }
 private static void WriteInlineCategoriesContent(XmlWriter writer, InlineCategoriesDocument categories, string version)
 {
     if (!string.IsNullOrEmpty(categories.Scheme))
     {
         writer.WriteAttributeString("scheme", categories.Scheme);
     }
     if (categories.IsFixed)
     {
         writer.WriteAttributeString("fixed", "yes");
     }
     ServiceDocumentFormatter.WriteAttributeExtensions(writer, categories, version);
     for (int i = 0; i < categories.Categories.Count; i++)
     {
         Atom10FeedFormatter.WriteCategory(writer, categories.Categories[i], version);
     }
     ServiceDocumentFormatter.WriteElementExtensions(writer, categories, version);
 }
コード例 #40
0
        SyndicationFeed ReadSourceFeed(XmlReader reader)
        {
            SyndicationFeed feed = null;

            if (!reader.IsEmptyElement)
            {
                Atom10FeedFormatter ff = new Atom10FeedFormatter();
                ((IXmlSerializable)ff).ReadXml(reader);                   // this does not check the QName of the wrapping element.
                feed = ff.Feed;
            }
            else
            {
                feed = new SyndicationFeed();
            }
            reader.Read();              // </source> or <source ... />
            return(feed);
        }
 private static void WriteInlineCategoriesContent(XmlWriter writer, InlineCategoriesDocument categories, string version)
 {
     if (!string.IsNullOrEmpty(categories.Scheme))
     {
         writer.WriteAttributeString(Atom10Constants.SchemeTag, categories.Scheme);
     }
     // by default, categories are not fixed
     if (categories.IsFixed)
     {
         writer.WriteAttributeString(App10Constants.Fixed, "yes");
     }
     WriteAttributeExtensions(writer, categories, version);
     for (int i = 0; i < categories.Categories.Count; ++i)
     {
         Atom10FeedFormatter.WriteCategory(writer, categories.Categories[i], version);
     }
     WriteElementExtensions(writer, categories, version);
 }
コード例 #42
0
ファイル: Atom10ItemFormatter.cs プロジェクト: raj581/Marvin
        SyndicationFeed ReadSourceFeed(XmlReader reader)
        {
            SyndicationFeed feed = null;

            if (!reader.IsEmptyElement)
            {
                reader.Read();
                Atom10FeedFormatter ff = new Atom10FeedFormatter();
                ff.ReadFrom(reader);
                feed = ff.Feed;
            }
            else
            {
                feed = new SyndicationFeed();
            }
            reader.Read();              // </source> or <source ... />
            return(feed);
        }
コード例 #43
0
        protected internal virtual bool TryParseElement(XmlReader reader, string version)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }
            reader.MoveToContent();

            if (reader.LocalName != "collection" || reader.NamespaceURI != version)
            {
                return(false);
            }

            for (int i = 0; i < reader.AttributeCount; i++)
            {
                reader.MoveToAttribute(i);
                if (!TryParseAttribute(reader.LocalName, reader.NamespaceURI, reader.Value, version))
                {
                    AttributeExtensions.Add(new XmlQualifiedName(reader.LocalName, reader.NamespaceURI), reader.Value);
                }
            }
            reader.MoveToElement();

            if (!reader.IsEmptyElement)
            {
                reader.Read();
                for (reader.MoveToContent(); reader.NodeType != XmlNodeType.EndElement; reader.MoveToContent())
                {
                    if (reader.LocalName == "title" && reader.NamespaceURI == Namespaces.Atom10)
                    {
                        Title = Atom10FeedFormatter.ReadTextSyndicationContent(reader);
                    }
                    else
                    {
                        ElementExtensions.Add(new SyndicationElementExtension(reader));
                    }
                }
            }
            reader.Read();
            return(true);
        }
コード例 #44
0
ファイル: Workspace.cs プロジェクト: pmq20/mono_forked
        protected internal virtual bool TryParseElement(XmlReader reader, string version)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            reader.MoveToContent();
            if (reader.LocalName != "workspace" || reader.NamespaceURI != version)
            {
                return(false);
            }

            bool isEmpty = reader.IsEmptyElement;

            reader.ReadStartElement();
            if (isEmpty)
            {
                return(true);
            }

            for (reader.MoveToContent(); reader.NodeType != XmlNodeType.EndElement; reader.MoveToContent())
            {
                if (reader.LocalName == "title" && reader.NamespaceURI == Namespaces.Atom10)
                {
                    Title = Atom10FeedFormatter.ReadTextSyndicationContent(reader);
                    continue;
                }
                else if (reader.LocalName == "collection" && reader.NamespaceURI == version)
                {
                    var rc = new ResourceCollectionInfo();
                    if (rc.TryParseElement(reader, version))
                    {
                        Collections.Add(rc);
                        continue;
                    }
                }
                ElementExtensions.Add(new SyndicationElementExtension(reader));
            }
            return(true);
        }
コード例 #45
0
        public static TSyndicationFeed Load <TSyndicationFeed>(XmlReader reader) where TSyndicationFeed : SyndicationFeed, new()
        {
            if (reader == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("reader");
            }
            Atom10FeedFormatter <TSyndicationFeed> formatter = new Atom10FeedFormatter <TSyndicationFeed>();

            if (formatter.CanRead(reader))
            {
                formatter.ReadFrom(reader);
                return(formatter.Feed as TSyndicationFeed);
            }
            Rss20FeedFormatter <TSyndicationFeed> formatter2 = new Rss20FeedFormatter <TSyndicationFeed>();

            if (!formatter2.CanRead(reader))
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new XmlException(System.ServiceModel.SR.GetString("UnknownFeedXml", new object[] { reader.LocalName, reader.NamespaceURI })));
            }
            formatter2.ReadFrom(reader);
            return(formatter2.Feed as TSyndicationFeed);
        }
コード例 #46
0
        public static async Task <TSyndicationFeed> LoadAsync <TSyndicationFeed>(XmlReader reader, CancellationToken ct) where TSyndicationFeed : SyndicationFeed, new()
        {
            Atom10FeedFormatter <TSyndicationFeed> atomSerializer = new Atom10FeedFormatter <TSyndicationFeed>();

            if (atomSerializer.CanRead(reader))
            {
                await atomSerializer.ReadFromAsync(reader, ct).ConfigureAwait(false);

                return(atomSerializer.Feed as TSyndicationFeed);
            }

            Rss20FeedFormatter <TSyndicationFeed> rssSerializer = new Rss20FeedFormatter <TSyndicationFeed>();

            if (rssSerializer.CanRead(reader))
            {
                await rssSerializer.ReadFromAsync(reader, ct).ConfigureAwait(false);

                return(rssSerializer.Feed as TSyndicationFeed);
            }

            throw new XmlException(SR.Format(SR.UnknownFeedXml, reader.LocalName, reader.NamespaceURI));
        }
コード例 #47
0
        private static async Task WriteInlineCategoriesContentAsync(XmlWriter writer, InlineCategoriesDocument categories, string version)
        {
            writer = XmlWriterWrapper.CreateFromWriter(writer);
            if (!string.IsNullOrEmpty(categories.Scheme))
            {
                await writer.WriteAttributeStringAsync(Atom10Constants.SchemeTag, categories.Scheme);
            }
            // by default, categories are not fixed
            if (categories.IsFixed)
            {
                await writer.WriteAttributeStringAsync(App10Constants.Fixed, "yes");
            }

            await WriteAttributeExtensionsAsync(writer, categories, version);

            for (int i = 0; i < categories.Categories.Count; ++i)
            {
                await Atom10FeedFormatter.WriteCategoryAsync(writer, categories.Categories[i], version);
            }

            await WriteElementExtensionsAsync(writer, categories, version);
        }
コード例 #48
0
        public static TSyndicationFeed Load <TSyndicationFeed>(XmlReader reader)
            where TSyndicationFeed : SyndicationFeed, new()
        {
            if (reader == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("reader");
            }
            Atom10FeedFormatter <TSyndicationFeed> atomSerializer = new Atom10FeedFormatter <TSyndicationFeed>();

            if (atomSerializer.CanRead(reader))
            {
                atomSerializer.ReadFrom(reader);
                return(atomSerializer.Feed as TSyndicationFeed);
            }
            Rss20FeedFormatter <TSyndicationFeed> rssSerializer = new Rss20FeedFormatter <TSyndicationFeed>();

            if (rssSerializer.CanRead(reader))
            {
                rssSerializer.ReadFrom(reader);
                return(rssSerializer.Feed as TSyndicationFeed);
            }
            throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new XmlException(SR.Format(SR.UnknownFeedXml, reader.LocalName, reader.NamespaceURI)));
        }
        private ResourceCollectionInfo ReadCollection(XmlReader reader, Workspace workspace)
        {
            CreateInlineCategoriesDelegate     inlineCategoriesFactory     = null;
            CreateReferencedCategoriesDelegate referencedCategoriesFactory = null;
            ResourceCollectionInfo             result = ServiceDocumentFormatter.CreateCollection(workspace);

            result.BaseUri = workspace.BaseUri;
            if (reader.HasAttributes)
            {
                while (reader.MoveToNextAttribute())
                {
                    if ((reader.LocalName == "base") && (reader.NamespaceURI == "http://www.w3.org/XML/1998/namespace"))
                    {
                        result.BaseUri = FeedUtils.CombineXmlBase(result.BaseUri, reader.Value);
                    }
                    else
                    {
                        if ((reader.LocalName == "href") && (reader.NamespaceURI == string.Empty))
                        {
                            result.Link = new Uri(reader.Value, UriKind.RelativeOrAbsolute);
                            continue;
                        }
                        string namespaceURI = reader.NamespaceURI;
                        string localName    = reader.LocalName;
                        if (!FeedUtils.IsXmlns(localName, namespaceURI) && !FeedUtils.IsXmlSchemaType(localName, namespaceURI))
                        {
                            string str3 = reader.Value;
                            if (!ServiceDocumentFormatter.TryParseAttribute(localName, namespaceURI, str3, result, this.Version))
                            {
                                if (this.preserveAttributeExtensions)
                                {
                                    result.AttributeExtensions.Add(new XmlQualifiedName(reader.LocalName, reader.NamespaceURI), reader.Value);
                                    continue;
                                }
                                SyndicationFeedFormatter.TraceSyndicationElementIgnoredOnRead(reader);
                            }
                        }
                    }
                }
            }
            XmlBuffer           buffer    = null;
            XmlDictionaryWriter extWriter = null;

            reader.ReadStartElement();
            try
            {
                while (reader.IsStartElement())
                {
                    if (reader.IsStartElement("title", "http://www.w3.org/2005/Atom"))
                    {
                        result.Title = Atom10FeedFormatter.ReadTextContentFrom(reader, "//app:service/app:workspace/app:collection/atom:title[@type]", this.preserveAttributeExtensions);
                    }
                    else
                    {
                        if (reader.IsStartElement("categories", "http://www.w3.org/2007/app"))
                        {
                            if (inlineCategoriesFactory == null)
                            {
                                inlineCategoriesFactory = () => ServiceDocumentFormatter.CreateInlineCategories(result);
                            }
                            if (referencedCategoriesFactory == null)
                            {
                                referencedCategoriesFactory = () => ServiceDocumentFormatter.CreateReferencedCategories(result);
                            }
                            result.Categories.Add(ReadCategories(reader, result.BaseUri, inlineCategoriesFactory, referencedCategoriesFactory, this.Version, this.preserveElementExtensions, this.preserveAttributeExtensions, this.maxExtensionSize));
                            continue;
                        }
                        if (reader.IsStartElement("accept", "http://www.w3.org/2007/app"))
                        {
                            result.Accepts.Add(reader.ReadElementString());
                        }
                        else if (!ServiceDocumentFormatter.TryParseElement(reader, result, this.Version))
                        {
                            if (this.preserveElementExtensions)
                            {
                                SyndicationFeedFormatter.CreateBufferIfRequiredAndWriteNode(ref buffer, ref extWriter, reader, this.maxExtensionSize);
                                continue;
                            }
                            SyndicationFeedFormatter.TraceSyndicationElementIgnoredOnRead(reader);
                            reader.Skip();
                        }
                    }
                }
                ServiceDocumentFormatter.LoadElementExtensions(buffer, extWriter, result);
            }
            finally
            {
                if (extWriter != null)
                {
                    extWriter.Close();
                }
            }
            reader.ReadEndElement();
            return(result);
        }
        private Workspace ReadWorkspace(XmlReader reader, ServiceDocument document)
        {
            Workspace workspace = ServiceDocumentFormatter.CreateWorkspace(document);

            workspace.BaseUri = document.BaseUri;
            if (reader.HasAttributes)
            {
                while (reader.MoveToNextAttribute())
                {
                    if ((reader.LocalName == "base") && (reader.NamespaceURI == "http://www.w3.org/XML/1998/namespace"))
                    {
                        workspace.BaseUri = FeedUtils.CombineXmlBase(workspace.BaseUri, reader.Value);
                    }
                    else
                    {
                        string namespaceURI = reader.NamespaceURI;
                        string localName    = reader.LocalName;
                        if (!FeedUtils.IsXmlns(localName, namespaceURI) && !FeedUtils.IsXmlSchemaType(localName, namespaceURI))
                        {
                            string str3 = reader.Value;
                            if (!ServiceDocumentFormatter.TryParseAttribute(localName, namespaceURI, str3, workspace, this.Version))
                            {
                                if (this.preserveAttributeExtensions)
                                {
                                    workspace.AttributeExtensions.Add(new XmlQualifiedName(reader.LocalName, reader.NamespaceURI), reader.Value);
                                    continue;
                                }
                                SyndicationFeedFormatter.TraceSyndicationElementIgnoredOnRead(reader);
                            }
                        }
                    }
                }
            }
            XmlBuffer           buffer    = null;
            XmlDictionaryWriter extWriter = null;

            reader.ReadStartElement();
            try
            {
                while (reader.IsStartElement())
                {
                    if (reader.IsStartElement("title", "http://www.w3.org/2005/Atom"))
                    {
                        workspace.Title = Atom10FeedFormatter.ReadTextContentFrom(reader, "//app:service/app:workspace/atom:title[@type]", this.preserveAttributeExtensions);
                    }
                    else
                    {
                        if (reader.IsStartElement("collection", "http://www.w3.org/2007/app"))
                        {
                            workspace.Collections.Add(this.ReadCollection(reader, workspace));
                            continue;
                        }
                        if (!ServiceDocumentFormatter.TryParseElement(reader, workspace, this.Version))
                        {
                            if (this.preserveElementExtensions)
                            {
                                SyndicationFeedFormatter.CreateBufferIfRequiredAndWriteNode(ref buffer, ref extWriter, reader, this.maxExtensionSize);
                                continue;
                            }
                            SyndicationFeedFormatter.TraceSyndicationElementIgnoredOnRead(reader);
                            reader.Skip();
                        }
                    }
                }
                ServiceDocumentFormatter.LoadElementExtensions(buffer, extWriter, workspace);
            }
            finally
            {
                if (extWriter != null)
                {
                    extWriter.Close();
                }
            }
            reader.ReadEndElement();
            return(workspace);
        }
コード例 #51
0
ファイル: SyndicationFeed.cs プロジェクト: samerames/corefx
 public static async Task <SyndicationFeed> LoadAsync(XmlReader reader, Atom10FeedFormatter formatter, CancellationToken ct)
 {
     return(await LoadAsync(reader, new Rss20FeedFormatter(), formatter, ct));
 }
        private Workspace ReadWorkspace(XmlReader reader, ServiceDocument document)
        {
            Workspace result = CreateWorkspace(document);

            result.BaseUri = document.BaseUri;
            if (reader.HasAttributes)
            {
                while (reader.MoveToNextAttribute())
                {
                    if (reader.LocalName == "base" && reader.NamespaceURI == Atom10FeedFormatter.XmlNs)
                    {
                        result.BaseUri = FeedUtils.CombineXmlBase(result.BaseUri, reader.Value);
                    }
                    else
                    {
                        string ns   = reader.NamespaceURI;
                        string name = reader.LocalName;
                        if (FeedUtils.IsXmlns(name, ns) || FeedUtils.IsXmlSchemaType(name, ns))
                        {
                            continue;
                        }

                        string val = reader.Value;
                        if (!TryParseAttribute(name, ns, val, result, Version))
                        {
                            result.AttributeExtensions.Add(new XmlQualifiedName(reader.LocalName, reader.NamespaceURI), reader.Value);
                        }
                    }
                }
            }

            XmlBuffer           buffer    = null;
            XmlDictionaryWriter extWriter = null;

            reader.ReadStartElement();
            try
            {
                while (reader.IsStartElement())
                {
                    if (reader.IsStartElement(Atom10Constants.TitleTag, Atom10Constants.Atom10Namespace))
                    {
                        result.Title = Atom10FeedFormatter.ReadTextContentFrom(reader, "//app:service/app:workspace/atom:title[@type]", preserveAttributeExtensions: true);
                    }
                    else if (reader.IsStartElement(App10Constants.Collection, App10Constants.Namespace))
                    {
                        result.Collections.Add(ReadCollection(reader, result));
                    }
                    else if (!TryParseElement(reader, result, Version))
                    {
                        SyndicationFeedFormatter.CreateBufferIfRequiredAndWriteNode(ref buffer, ref extWriter, reader, _maxExtensionSize);
                    }
                }
                LoadElementExtensions(buffer, extWriter, result);
            }
            finally
            {
                extWriter?.Close();
            }

            reader.ReadEndElement();
            return(result);
        }
        private ResourceCollectionInfo ReadCollection(XmlReader reader, Workspace workspace)
        {
            ResourceCollectionInfo result = CreateCollection(workspace);

            result.BaseUri = workspace.BaseUri;
            if (reader.HasAttributes)
            {
                while (reader.MoveToNextAttribute())
                {
                    if (reader.LocalName == "base" && reader.NamespaceURI == Atom10FeedFormatter.XmlNs)
                    {
                        result.BaseUri = FeedUtils.CombineXmlBase(result.BaseUri, reader.Value);
                    }
                    else if (reader.LocalName == App10Constants.Href && reader.NamespaceURI == string.Empty)
                    {
                        result.Link = new Uri(reader.Value, UriKind.RelativeOrAbsolute);
                    }
                    else
                    {
                        string ns   = reader.NamespaceURI;
                        string name = reader.LocalName;
                        if (FeedUtils.IsXmlns(name, ns) || FeedUtils.IsXmlSchemaType(name, ns))
                        {
                            continue;
                        }

                        string val = reader.Value;
                        if (!TryParseAttribute(name, ns, val, result, Version))
                        {
                            result.AttributeExtensions.Add(new XmlQualifiedName(reader.LocalName, reader.NamespaceURI), reader.Value);
                        }
                    }
                }
            }

            XmlBuffer           buffer    = null;
            XmlDictionaryWriter extWriter = null;

            reader.ReadStartElement();
            try
            {
                while (reader.IsStartElement())
                {
                    if (reader.IsStartElement(Atom10Constants.TitleTag, Atom10Constants.Atom10Namespace))
                    {
                        result.Title = Atom10FeedFormatter.ReadTextContentFrom(reader, "//app:service/app:workspace/app:collection/atom:title[@type]", preserveAttributeExtensions: true);
                    }
                    else if (reader.IsStartElement(App10Constants.Categories, App10Constants.Namespace))
                    {
                        result.Categories.Add(ReadCategories(reader,
                                                             result.BaseUri,
                                                             () => CreateInlineCategories(result),
                                                             () => CreateReferencedCategories(result),
                                                             Version,
                                                             _maxExtensionSize));
                    }
                    else if (reader.IsStartElement(App10Constants.Accept, App10Constants.Namespace))
                    {
                        result.Accepts.Add(reader.ReadElementString());
                    }
                    else if (!TryParseElement(reader, result, Version))
                    {
                        SyndicationFeedFormatter.CreateBufferIfRequiredAndWriteNode(ref buffer, ref extWriter, reader, _maxExtensionSize);
                    }
                }
                LoadElementExtensions(buffer, extWriter, result);
            }
            finally
            {
                extWriter?.Close();
            }

            reader.ReadEndElement();
            return(result);
        }
コード例 #54
0
ファイル: SyndicationFeed.cs プロジェクト: samerames/corefx
        public static async Task <SyndicationFeed> LoadAsync(XmlReader reader, Rss20FeedFormatter Rssformatter, Atom10FeedFormatter Atomformatter, CancellationToken ct)
        {
            if (reader == null)
            {
                throw new ArgumentNullException(nameof(reader));
            }

            XmlReaderWrapper wrappedReader = XmlReaderWrapper.CreateFromReader(reader);

            Atom10FeedFormatter atomSerializer = Atomformatter;

            if (atomSerializer.CanRead(wrappedReader))
            {
                await atomSerializer.ReadFromAsync(wrappedReader, new CancellationToken());

                return(atomSerializer.Feed);
            }
            Rss20FeedFormatter rssSerializer = Rssformatter;

            if (rssSerializer.CanRead(wrappedReader))
            {
                await rssSerializer.ReadFromAsync(wrappedReader, new CancellationToken());

                return(rssSerializer.Feed);
            }
            throw new XmlException(string.Format(SR.UnknownFeedXml, wrappedReader.LocalName, wrappedReader.NamespaceURI));
        }
        private static void ReadInlineCategories(XmlReader reader, InlineCategoriesDocument inlineCategories, Uri baseUri, string version, int maxExtensionSize)
        {
            inlineCategories.BaseUri = baseUri;
            if (reader.HasAttributes)
            {
                while (reader.MoveToNextAttribute())
                {
                    if (reader.LocalName == "base" && reader.NamespaceURI == Atom10FeedFormatter.XmlNs)
                    {
                        inlineCategories.BaseUri = FeedUtils.CombineXmlBase(inlineCategories.BaseUri, reader.Value);
                    }
                    else if (reader.LocalName == "lang" && reader.NamespaceURI == Atom10FeedFormatter.XmlNs)
                    {
                        inlineCategories.Language = reader.Value;
                    }
                    else if (reader.LocalName == App10Constants.Fixed && reader.NamespaceURI == string.Empty)
                    {
                        inlineCategories.IsFixed = (reader.Value == "yes");
                    }
                    else if (reader.LocalName == Atom10Constants.SchemeTag && reader.NamespaceURI == string.Empty)
                    {
                        inlineCategories.Scheme = reader.Value;
                    }
                    else
                    {
                        string ns   = reader.NamespaceURI;
                        string name = reader.LocalName;
                        if (FeedUtils.IsXmlns(name, ns) || FeedUtils.IsXmlSchemaType(name, ns))
                        {
                            continue;
                        }

                        string val = reader.Value;
                        if (!TryParseAttribute(name, ns, val, inlineCategories, version))
                        {
                            inlineCategories.AttributeExtensions.Add(new XmlQualifiedName(reader.LocalName, reader.NamespaceURI), reader.Value);
                        }
                    }
                }
            }
            SyndicationFeedFormatter.MoveToStartElement(reader);
            bool isEmptyElement = reader.IsEmptyElement;

            reader.ReadStartElement();
            if (!isEmptyElement)
            {
                XmlBuffer           buffer    = null;
                XmlDictionaryWriter extWriter = null;
                try
                {
                    while (reader.IsStartElement())
                    {
                        if (reader.IsStartElement(Atom10Constants.CategoryTag, Atom10Constants.Atom10Namespace))
                        {
                            SyndicationCategory category = CreateCategory(inlineCategories);
                            Atom10FeedFormatter.ReadCategory(reader, category, version, preserveAttributeExtensions: true, preserveElementExtensions: true, maxExtensionSize);
                            if (category.Scheme == null)
                            {
                                category.Scheme = inlineCategories.Scheme;
                            }
                            inlineCategories.Categories.Add(category);
                        }
                        else if (!TryParseElement(reader, inlineCategories, version))
                        {
                            SyndicationFeedFormatter.CreateBufferIfRequiredAndWriteNode(ref buffer, ref extWriter, reader, maxExtensionSize);
                        }
                    }
                    LoadElementExtensions(buffer, extWriter, inlineCategories);
                }
                finally
                {
                    extWriter?.Close();
                }
                reader.ReadEndElement();
            }
        }
コード例 #56
0
        private static async Task ReadInlineCategoriesAsync(XmlReaderWrapper reader, InlineCategoriesDocument inlineCategories, Uri baseUri, string version, bool preserveElementExtensions, bool preserveAttributeExtensions, int _maxExtensionSize)
        {
            inlineCategories.BaseUri = baseUri;
            if (reader.HasAttributes)
            {
                while (reader.MoveToNextAttribute())
                {
                    if (reader.LocalName == "base" && reader.NamespaceURI == Atom10FeedFormatter.XmlNs)
                    {
                        inlineCategories.BaseUri = FeedUtils.CombineXmlBase(inlineCategories.BaseUri, await reader.GetValueAsync());
                    }
                    else if (reader.LocalName == "lang" && reader.NamespaceURI == Atom10FeedFormatter.XmlNs)
                    {
                        inlineCategories.Language = await reader.GetValueAsync();
                    }
                    else if (reader.LocalName == App10Constants.Fixed && reader.NamespaceURI == string.Empty)
                    {
                        inlineCategories.IsFixed = (reader.Value == "yes");
                    }
                    else if (reader.LocalName == Atom10Constants.SchemeTag && reader.NamespaceURI == string.Empty)
                    {
                        inlineCategories.Scheme = await reader.GetValueAsync();
                    }
                    else
                    {
                        string ns   = reader.NamespaceURI;
                        string name = reader.LocalName;
                        if (FeedUtils.IsXmlns(name, ns) || FeedUtils.IsXmlSchemaType(name, ns))
                        {
                            continue;
                        }
                        string val = await reader.GetValueAsync();

                        if (!TryParseAttribute(name, ns, val, inlineCategories, version))
                        {
                            if (preserveAttributeExtensions)
                            {
                                inlineCategories.AttributeExtensions.Add(new XmlQualifiedName(reader.LocalName, reader.NamespaceURI), await reader.GetValueAsync());
                            }
                        }
                    }
                }
            }

            await SyndicationFeedFormatter.MoveToStartElementAsync(reader);

            bool isEmptyElement = reader.IsEmptyElement;
            await reader.ReadStartElementAsync();

            if (!isEmptyElement)
            {
                XmlBuffer           buffer    = null;
                XmlDictionaryWriter extWriter = null;
                try
                {
                    while (await reader.IsStartElementAsync())
                    {
                        if (await reader.IsStartElementAsync(Atom10Constants.CategoryTag, Atom10Constants.Atom10Namespace))
                        {
                            SyndicationCategory category = CreateCategory(inlineCategories);
                            await Atom10FeedFormatter.ReadCategoryAsync(reader, category, version, preserveAttributeExtensions, preserveElementExtensions, _maxExtensionSize);

                            if (category.Scheme == null)
                            {
                                category.Scheme = inlineCategories.Scheme;
                            }

                            inlineCategories.Categories.Add(category);
                        }
                        else if (!TryParseElement(reader, inlineCategories, version))
                        {
                            if (preserveElementExtensions)
                            {
                                var tuple = await SyndicationFeedFormatter.CreateBufferIfRequiredAndWriteNodeAsync(buffer, extWriter, reader, _maxExtensionSize);

                                buffer    = tuple.Item1;
                                extWriter = tuple.Item2;
                            }
                            else
                            {
                                await reader.SkipAsync();
                            }
                        }
                    }
                    LoadElementExtensions(buffer, extWriter, inlineCategories);
                }
                finally
                {
                    if (extWriter != null)
                    {
                        extWriter.Close();
                    }
                }

                await reader.ReadEndElementAsync();
            }
        }
        private static void ReadInlineCategories(XmlReader reader, InlineCategoriesDocument inlineCategories, Uri baseUri, string version, bool preserveElementExtensions, bool preserveAttributeExtensions, int maxExtensionSize)
        {
            inlineCategories.BaseUri = baseUri;
            if (reader.HasAttributes)
            {
                while (reader.MoveToNextAttribute())
                {
                    if ((reader.LocalName == "base") && (reader.NamespaceURI == "http://www.w3.org/XML/1998/namespace"))
                    {
                        inlineCategories.BaseUri = FeedUtils.CombineXmlBase(inlineCategories.BaseUri, reader.Value);
                    }
                    else
                    {
                        if ((reader.LocalName == "lang") && (reader.NamespaceURI == "http://www.w3.org/XML/1998/namespace"))
                        {
                            inlineCategories.Language = reader.Value;
                            continue;
                        }
                        if ((reader.LocalName == "fixed") && (reader.NamespaceURI == string.Empty))
                        {
                            inlineCategories.IsFixed = reader.Value == "yes";
                            continue;
                        }
                        if ((reader.LocalName == "scheme") && (reader.NamespaceURI == string.Empty))
                        {
                            inlineCategories.Scheme = reader.Value;
                            continue;
                        }
                        string namespaceURI = reader.NamespaceURI;
                        string localName    = reader.LocalName;
                        if (!FeedUtils.IsXmlns(localName, namespaceURI) && !FeedUtils.IsXmlSchemaType(localName, namespaceURI))
                        {
                            string str3 = reader.Value;
                            if (!ServiceDocumentFormatter.TryParseAttribute(localName, namespaceURI, str3, inlineCategories, version))
                            {
                                if (preserveAttributeExtensions)
                                {
                                    inlineCategories.AttributeExtensions.Add(new XmlQualifiedName(reader.LocalName, reader.NamespaceURI), reader.Value);
                                    continue;
                                }
                                SyndicationFeedFormatter.TraceSyndicationElementIgnoredOnRead(reader);
                            }
                        }
                    }
                }
            }
            SyndicationFeedFormatter.MoveToStartElement(reader);
            bool isEmptyElement = reader.IsEmptyElement;

            reader.ReadStartElement();
            if (!isEmptyElement)
            {
                XmlBuffer           buffer    = null;
                XmlDictionaryWriter extWriter = null;
                try
                {
                    while (reader.IsStartElement())
                    {
                        if (reader.IsStartElement("category", "http://www.w3.org/2005/Atom"))
                        {
                            SyndicationCategory category = ServiceDocumentFormatter.CreateCategory(inlineCategories);
                            Atom10FeedFormatter.ReadCategory(reader, category, version, preserveAttributeExtensions, preserveElementExtensions, maxExtensionSize);
                            if (category.Scheme == null)
                            {
                                category.Scheme = inlineCategories.Scheme;
                            }
                            inlineCategories.Categories.Add(category);
                        }
                        else if (!ServiceDocumentFormatter.TryParseElement(reader, inlineCategories, version))
                        {
                            if (preserveElementExtensions)
                            {
                                SyndicationFeedFormatter.CreateBufferIfRequiredAndWriteNode(ref buffer, ref extWriter, reader, maxExtensionSize);
                                continue;
                            }
                            SyndicationFeedFormatter.TraceSyndicationElementIgnoredOnRead(reader);
                            reader.Skip();
                        }
                    }
                    ServiceDocumentFormatter.LoadElementExtensions(buffer, extWriter, inlineCategories);
                }
                finally
                {
                    if (extWriter != null)
                    {
                        extWriter.Close();
                    }
                }
                reader.ReadEndElement();
            }
        }