如何在我的ASP.NET网站中显示其他网站的RSS源?
问题描述:
我很容易在SharePoint中做到这一点,但我似乎无法弄清楚如何在ASP.NET中这样做。我只想从Weather.com(http://www.weather.com/rss/national/rss_nwf_rss.xml?cm_ven=NWF&cm_cat=rss&par=NWF_rss)等网站在我的网站中显示一些简单的RSS源。在我看到的每个例子中,他们都连接到数据库,并添加了所有这些看似轻浮的额外内容。当然,必须有一个简单的方法来添加你的URL并绑定到Listview/Gridview来显示数据。你可以帮我吗?如何在我的ASP.NET网站中显示其他网站的RSS源?
答
我会添加一个中继器来填充来自RSS的项目,并且还使用Syndication(System.ServiceModel.Syndication)。我选择了转发器,因为它具有非常灵活的布局。如果你愿意,你可以使用ListView或者GridView。我的标记应该是这样的:
<asp:Repeater ID="rptRSS" runat="server" OnItemDataBound="rptRSS_ItemDataBound">
<HeaderTemplate>
<table class="tablerss">
</HeaderTemplate>
<ItemTemplate>
<tr>
<td class="rsstitle">
<asp:Label ID="lblRSSTitle" runat="server" CssClass="rsshead"></asp:Label>
</td>
</tr>
<tr>
<td>
<asp:HyperLink ID="lnkArticle" runat="server"></asp:HyperLink>
</td>
</tr>
<tr>
<td class="rssdescription">
<asp:Label ID="lblDescription" runat="server"></asp:Label>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
<br />
</FooterTemplate>
</asp:Repeater>
而且在我的代码有:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
LoadRSS();
}
}
protected void rptRSS_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
HyperLink lnkArticle = (HyperLink)e.Item.FindControl("lnkArticle");
Label lblDescription = (Label)e.Item.FindControl("lblDescription");
Label lblRSSTitle = (Label)e.Item.FindControl("lblRSSTitle");
SyndicationItem item = (SyndicationItem)e.Item.DataItem;
lnkArticle.Text = item.Title.Text;
lnkArticle.NavigateUrl = item.Links[0].Uri.ToString(); ;
lblRSSTitle.Text = item.Title.Text;
lblDescription.Text = item.Summary.Text;
}
}
private void LoadRSS()
{
List<SyndicationItem> lstSynItem = new List<SyndicationItem>();
string uri = "http://www.weather.com/rss/national/rss_nwf_rss.xml?cm_ven=NWF&cm_cat=rss&par=NWF_rss";
SyndicationFeed myRss = SyndicationFeed.Load(XmlReader.Create(uri));
foreach (SyndicationItem item in myRss.Items)
{
lstSynItem.Add(item);
}
rptRSS.DataSource = lstSynItem;
rptRSS.DataBind();
}
有由Scott Michell一些好文章,虽然他们没有更新,但仍有助于开始探索RSS!