使用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>
}
我想我在你的代码中发现了一个问题。您缺少为每个迭代添加项目到列表中。
所以不是:
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的完整列表。核心逻辑是,当您进行迭代并在每个迭代周期中获得所需的项时,您应该记住它们。这意味着将它们保存在临时列表中。