0

我正在写一个 Rss 阅读器。我的问题是:如果我使用 syndicationfeed,我可以按类别排序吗?这个想法是当提要显示在列表框中时已经排序。仅对 1 个预定义类别进行排序和显示。

我是一名新程序员,所以我正在研究这个 MSDN 示例: http: //msdn.microsoft.com/en-us/library/hh487167 (v=vs.92).aspx

我使用的 RSS 提要是:http ://www.zimo.co/feed/


更新:

我的新尝试解决但失败了:

private void UpdateFeedList(string feedXML)
    {
        StringReader stringReader = new StringReader(feedXML);
        XmlReader xmlReader = XmlReader.Create(stringReader);
                                                              //problem below (I do not get sort method)
        SyndicationFeed feed = SyndicationFeed.Load(xmlReader).Categories.sort();


        Deployment.Current.Dispatcher.BeginInvoke(() =>
        {
           //binding listbox with feed items
            ls_text.ItemsSource = feed.Items;



        });
    }
4

1 回答 1

0

更新 我对此进行了更深入的研究。首先,对我来说,仅仅因为每个项目都有多个类别就按类别排序项目是没有意义的。正如您在下面指出的,您对过滤感兴趣。以下是我的做法(代码进入 UpdateFeedList 事件):

//same code as in the example
SyndicationFeed feed = SyndicationFeed.Load(xmlReader);

//I pull out the distinct list of categories from the entire feed
//You might want to bind this list to a dropdown on your app
//so that users can select what they want to see:
List<string> cats = new List<string>();
foreach (SyndicationItem si in feed.Items)
    foreach(SyndicationCategory sc in si.Categories)
       if (!cats.Contains(sc.Name))
          cats.Add(sc.Name);

//Here I imagined that I want to see all items categorized as "Trendy"
SyndicationCategory lookingFor = new SyndicationCategory("Trendy");

//and I create a container where I could copy all "Trendy" items:
List<SyndicationItem> coll = new List<SyndicationItem>();

//And then I start filtering all items by the selected tag:
foreach (SyndicationItem si in feed.Items)
{
     foreach (SyndicationCategory sc in si.Categories)
         if (sc.Name == lookingFor.Name)
         {
                    coll.Add(si);
                    break;
         }
}

Deployment.Current.Dispatcher.BeginInvoke(() =>
{
    // Bind the filtered of SyndicationItems to our ListBox.
       feedListBox.ItemsSource = coll;

       loadFeedButton.Content = "Refresh Feed";
});

以下内容不正确

yoursyndicationfeed.Categories.Sort()

我个人不会按日期降序对 RSS 提要进行排序(它应该已经排序),因为 RSS 提要以与它们发布的相反顺序为我提供网站内容的更新,并且我如何最人们习惯于看到它:)

另一个更新(也不正确:))

好的,所以我面前仍然没有该应用程序的代码,但是围绕文档(我在评论中提到)进行挖掘,您可以执行以下操作:

SyndicationFeed feed = SyndicationFeed.Load(xmlReader); 
feed.Items.OrderBy(x => x.Category);

这个想法是 feed.Items 是您的元素列表。所以把它当作一个列表,按照你需要的属性对其进行排序。

哦,另外,我在RSS阅读器上看到了你的另一个问题,你必须使用样本吗?Scott Guthrie为 Windows Phone 7 编写了一个 RSS 客户端,他的实现似乎更简单一些。当然,这取决于您的需求。

于 2012-04-06T13:43:30.517 回答