如何在我的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!