使用MVC阅读多个RSS提要;Linq to XML

本文关键字:提要 Linq to XML RSS MVC 使用 | 更新日期: 2023-09-27 18:02:48

当涉及到编码时,我真的很生疏,一直在努力寻找答案,但现在我已经束手无策了。

我的网站有存储的RSS url数据库。我怎么也想不出如何遍历和显示所有的RSS提要数据。

我可以让一个提要很好地显示,但是显示所有提要,我只是不知道该怎么做才能让它们全部显示。任何帮助将非常感激!

模型: RSS.cs

namespace MyWebsite.Models
{
    public class RSS
    {
        public string Link    { get; set; }
        public string Title         { get; set; }
        public string Description   { get; set; }
        public string PubDate       { get; set; }
        public string Date          { get; set; }
    }
}

模型: RSSReader.cs

namespace MyWebsite.Models
{
    public class RSSReader
    {
        private static string _URL = "";
        public static IEnumerable<RSS> GetRSSFeed()
        {
            IEnumerable<RSS> feeds = null;
            XDocument feedXml = null;
            XNamespace rss = "http://purl.org/rss/1.0/";
            XNamespace dc = "http://purl.org/dc/elements/1.1/";
            int count = 0;
            foreach (var url in BansheeData.GetURL(count))
            {
                _URL = url.url1;
                feedXml = XDocument.Load(_URL);
                    feeds = from feed in feedXml.Descendants(rss + "item")
                            select new RSS
                            {
                                Title = feed.Element(rss + "title").Value,
                                Link = feed.Element(rss + "link").Value,
                                Date = feed.Element(dc + "date").Value.Remove(10)
                            };
                count++;
            }
            return feeds;
        }
    }
}

控制器: RSSController.cs

public ActionResult Index()
{
      var urlFeed = MyWebsite.Models.RSSReader.GetRSSFeed();
      return View(urlFeed);
}

视图: _RSSFeed.cshtml

@model IEnumerable<MyWebsite.Models.RSS>
@foreach (var item in Model) { 
    <section>
        <header class="overflow">
            <h1>
                <a href="@item.Link" target="_blank" class="alt overflow">
                    <span class="fl">@Html.Raw(item.Title)</span>
                    <span class="ref fr">Source, @Html.Encode(item.Date)</span>
                </a>
            </h1>
        </header>
    </section>
}

使用MVC阅读多个RSS提要;Linq to XML

我想我在你的代码中发现了一个问题。您缺少为每个迭代添加项目到列表中。

所以不是:

            foreach (var url in BansheeData.GetURL(count))
            {
                _URL = url.url1;
                feedXml = XDocument.Load(_URL);
                feeds = from feed in feedXml.Descendants(rss + "item")
                            select new RSS
                            {
                                Title = feed.Element(rss + "title").Value,
                                Link = feed.Element(rss + "link").Value,
                                Date = feed.Element(dc + "date").Value.Remove(10)
                            };
                count++;
            }
            return feeds;

您尝试在每次迭代中将AddRange放入列表中:

        var rssList = new List<RSS>;
        foreach (var url in BansheeData.GetURL(count))
        {
            _URL = url.url1;
            feedXml = XDocument.Load(_URL);
            feeds = from feed in feedXml.Descendants(rss + "item")
                        select new RSS
                        {
                            Title = feed.Element(rss + "title").Value,
                            Link = feed.Element(rss + "link").Value,
                            Date = feed.Element(dc + "date").Value.Remove(10)
                        };
            rssList.AddRange(feeds);
            count++;
        }
        return rssList;

这应该有帮助。现在您应该获得了RSS的完整列表。核心逻辑是,当您进行迭代并在每个迭代周期中获得所需的项时,您应该记住它们。这意味着将它们保存在临时列表中。