从SyndicationFeed for Win8应用程序扩展rss提要和读取项目

时间:2013-01-16 20:49:22

标签: c# windows-8 rss syndicationfeed

我已经使用自定义fielditems扩展了RSS feed,例如,使用图片网址(http:// linktoimage)

我正在阅读RSS源:

    SyndicationFeed feed = await client.RetrieveFeedAsync(new Uri(feedUrl));

但是为了读取新元素,我需要使用项扩展SyndicationFeed(它需要一个默认的RSS项目)。我找不到最近如何做到这一点的例子。大多数代码都无法应用于Win8应用程序。我发现最近的是:

    i.ElementExtensions.First(element => element.NodeName == "imgurl").NodeValue); 

但这导致了异常错误。当查看元素的值时,它显示的是已发布的标记而不是值。我希望它能找到第一个imgurl标签并返回它的值。就像我在代码中找到代码一样 (http://code.msdn.microsoft.com/windowsapps/XAML-Twitter-Client-e343d336

如何使用“SyndidationFeed”读取我添加到Feed(作为字符串)的额外xml标记?

1 个答案:

答案 0 :(得分:0)

执行此操作的最佳方法是使用LINQ。例如,阅读WordPress RSS(注意提交):

XmlDocument xDoc = await XmlDocument.LoadFromUriAsync(new Uri(blog.URL)); //URL you're trying to read
        StringReader stringReader= new StringReader(xDoc.GetXml());
        XmlReader xmlReader = XmlReader.Create(stringReader);
        XDocument loadedPosts = XDocument.Load(xmlReader); //this can be done simpler using HttpClient.GetStringAsync
        XNamespace dc = "http://purl.org/dc/elements/1.1/";
        XNamespace content = XNamespace.Get("http://purl.org/rss/1.0/modules/content/"); //declare namespaces for dc:content
        var data = from query in loadedPosts.Descendants("item") //gets all the "item" tags
                   select new Post //class you must create
                   {
                       NombreBlog = (string)query.Parent.Element("title"), //then you simply change 'Element("title")' with 'Element("propertyYouWant")'
                       Titulo = (string)query.Element("title"),
                       Autor = (string)query.Element(dc + "creator"),
                       Contenido = (string)query.Element(content + "encoded"),
                       PubDate = (string)query.Element("pubDate"),
                       Link = (string)query.Element("link"),
                       ID = getId((string)query.Element("guid")),
                       Imagen = getImage((string)query.Element(content + "encoded"))
                   };

通过这种方式,您可以获得所需的所有属性或标签,例如,您甚至可以将函数标记为传递标记并仅返回图像源。