【问题标题】:Extend rss feed and read items from SyndicationFeed for Win8 app扩展 rss 提要并从 SyndicationFeed for Win8 应用程序读取项目
【发布时间】:2013-01-16 20:49:21
【问题描述】:

我已经使用自定义字段项扩展了一个 RSS 提要,例如,使用图像 url (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”时,如何读取和添加到提要中的额外 xml 标签(作为字符串)?

【问题讨论】:

    标签: c# windows-8 rss syndicationfeed


    【解决方案1】:

    最好的方法是使用 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"))
                       };
    

    这样你可以获得所有你想要的属性或标签,你甚至可以给它们分配一个函数,例如传递一个标签并只返回一个图像源。

    【讨论】:

    • 感谢您的回复。我宁愿向 Syndycation 提要添加额外的元素,而不是重写代码。当我阅读微软手册时,应该可以msdn.microsoft.com/en-us/library/…,但它只是不起作用。
    猜你喜欢
    • 1970-01-01
    • 2011-05-27
    • 2017-06-20
    • 1970-01-01
    • 2012-03-04
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多