ساده ترين نوع استفاده از RSS در پايگاه اطلاع رساني ، نمايش آخرين اخبار پايگاههاي ديگر مي باشد . در اين حالت کافي است که محلي براي نمايش اطلاعات پايگاه مورد نشر در نظر بگيريد و بسته به اينکه بخواهيد فايل مورد نظر چگونه نمايش داده شود ، آن را سفارشي نماييد .
مثال :
براي نمايش اخبار منتشر شده در BBC در پايگاه خود، در ساده ترين حالت ،کافي است که يک صفحه .aspx ايجاد نماييد . سپس يک Datagrid در صفحه قرار دهيد :
<asp:DataGrid id="dgPost" runat="server" AutoGenerateColumns="False" BorderColor="#DEBA84" BorderStyle="None" CellSpacing="2" BorderWidth="1px" BackColor="#DEBA84" CellPadding="3" dir=rtl> <SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#738A9C"></SelectedItemStyle> <ItemStyle ForeColor="#8C4510" BackColor="#FFF7E7"></ItemStyle> <HeaderStyle Font-Bold="True" ForeColor="White" BackColor="#A55129"></HeaderStyle> <FooterStyle ForeColor="#8C4510" BackColor="#F7DFB5"></FooterStyle> <Columns> <asp:TemplateColumn HeaderText="title"> <ItemTemplate> <a href=<%# DataBinder.Eval(Container, "DataItem.link") %>><%# DataBinder.Eval(Container, "DataItem.title") %> </a> </ItemTemplate> </asp:TemplateColumn> <asp:BoundColumn DataField="description" HeaderText="Description"></asp:BoundColumn> </Columns> <PagerStyle HorizontalAlign="Center" ForeColor="#8C4510" Mode="NumericPages"></PagerStyle> </asp:DataGrid> |
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Xml; namespace rss { /// <summary> /// Summary description for WebForm1. /// </summary> public class WebForm1 : System.Web.UI.Page { protected System.Web.UI.WebControls.DataGrid dgPost;
private void Page_Load(object sender, System.EventArgs e) { dgPost.DataSource=GetRss("http://www.bbc.co.uk/syndication/feeds/news/ukfs_news/world/rss091.xml"); dgPost.DataBind(); } public DataTable GetRss(string str) { XmlTextReader xmlr = new XmlTextReader(str); DataSet ds = new DataSet(); ds.ReadXml(xmlr); return ds.Tables[2]; } |
همانطور که مشخص استDatagrid تعريف شده ، براي نمايش عنوان و توضيح خبر مورد استفاده قرار مي گيرد . اين ساده ترين حالت ممکن براي استفاده از xml پايگاههاي ديگر مي باشد.
در اين حالت مي توان به شي "XmlTextReader"، نشاني فايل مورد نظر را ارسال کرد . سپس فايل را از طريق متد ReadXml در DataSet قرار داد. نکته مهم اين است که در هنگام خواندن xml ، DataSet به ازاي هر سطح از xml يک DataTable ايجاد مي کند . بنابراين عناصر <rss> و <channel> هرکدام به عنوان يک جدول در DataSet شناخته خواهند شد . مي توان نتيجه گرفت که براي نمايش اطلاعات <channel> (شامل زبان ، ttl ، copyright و ...) کافي است که اطلاعات جدول شماره 1 يا [ ds.Tables[1 را استخراج نماييد .
با استفاده از روش بالا مي توان اطلاعات را به درستي نمايش داد .اما استفاده از UserControl اين امکان را مي دهد که بتوانيم بدون تغيير محسوس در صفحات، کدي ايجاد نماييم که هم قابليت استفاده مجدد ( بدون تکرار کردن کد ) را داشته باشد و هم تغيير و کنترل آن ساده و از يک فايل، براي تمامي صفحات باشد .براي اينکار ابتدا با استفاده از Visual Studio فايلي با عنوان rssFeed.ascx مي سازيم و مجددا روند ذکر شده در روش قبل را تکرار مي کنيم .
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="RssFeed.ascx.cs" Inherits="rss.RssFeed" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%> <asp:DataGrid id="dgPost" runat="server" AutoGenerateColumns="False" BorderColor="#DEBA84" BorderStyle="None" CellSpacing="2" BorderWidth="1px" BackColor="#DEBA84" CellPadding="3" dir=rtl> <SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#738A9C"></SelectedItemStyle> <ItemStyle ForeColor="#8C4510" BackColor="#FFF7E7"></ItemStyle> <HeaderStyle Font-Bold="True" ForeColor="White" BackColor="#A55129"></HeaderStyle> <FooterStyle ForeColor="#8C4510" BackColor="#F7DFB5"></FooterStyle> <Columns> <asp:TemplateColumn HeaderText="title"> <ItemTemplate> <a href=<%# DataBinder.Eval(Container, "DataItem.link") %>><%# DataBinder.Eval(Container, "DataItem.title") %> </a> </ItemTemplate> </asp:TemplateColumn> <asp:BoundColumn DataField="description" HeaderText="Description"></asp:BoundColumn> </Columns> <PagerStyle HorizontalAlign="Center" ForeColor="#8C4510" Mode="NumericPages"></PagerStyle> </asp:DataGrid> |
namespace rss {using System; using System.Data; using System.Drawing; using System.Web; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Xml; /// <summary> /// Summary description for RssFeed. /// </summary> public class RssFeed : System.Web.UI.UserControl {private void Page_Load(object sender, System.EventArgs e) {dgPost.DataSource=GetRss("http:/mydomain.com/rss.xml"); dgPost.DataBind(); }public DataTable GetRss(string str) { XmlTextReader xmlr = new XmlTextReader(str); DataSet ds = new DataSet(); ds.ReadXml(xmlr); return ds.Tables[2]; } |
چگونگي استفاده از UserControl
نکته مهم در مورد UserControl نحوه استفاده از اين فايل مي باشد. براي استفاده از UserControl در صفحات ديگر، احتياج به معرفي Usercontrol ايجاد شده داريم که از طريق کد زير قابل انجام مي باشد .
<%@ Register TagPrefix="rss" TagName="rssFeed" Src="ssFeed.ascx" %>
با استفاده از اين کد مي توان کنترل جديد را در هر صفحه .aspx که مي خواهيد از آن استفاده کنيد، معرفي نماييد . به عنوان مثال :
<%@ Register TagPrefix="rss" TagName="rssFeed" Src="rssFeed.ascx" %> <%@ Page language="c#" Codebehind="View.aspx.cs" AutoEventWireup="false" Inherits="rss.WebForm1" %> <HTML> <HEAD> </HEAD> <body MS_POSITIONING="GridLayout"> <TABLE height="163" cellSpacing="0" cellPadding="0" width="57" border="0" ms_2d_layout="TRUE"> <TR vAlign="top"> <TD width="57" height="163"> <form id="frm" method="post" runat="server"> <TABLE height="40" cellSpacing="0" cellPadding="0" width="151" border="0" ms_2d_layout="TRUE"> <TR vAlign="top"> <TD width="10" height="15"></TD> <TD width="141"></TD> </TR> <TR vAlign="top"> <TD height="25"></TD> <TD> <rss:rssFeed id="ucRssFeed" runat="Server" /></TD> </TR> </TABLE> </form> </TD> </TR> </TABLE> </body> </HTML> |
استفاده از caching
مطمئنا در هنگام نمايش اطلاعات سايرين در پايگاه خود ، بهتر است که به ازاي هر بار، بارگذاري صفحه ، به پايگاه ارائه دهنده RSS مراجعه نکنيم . بلکه در يک مدت زمان مشخص تغيير اطلاعات را چک نماييم . يکي از ساده ترين روشها Cache کردن اطلاعات RSS براي يک مدت زمان دلخواه مي باشد تا هر زمان که اين بازه زماني به پايان مي رسد بتوانيم اطلاعات Feed را از پايگاه ارائه دهنده مجددا بخوانيم .براي اين کار مي توانيم به صورت زير عمل نماييم :
namespace rss using System; using System.Data; using System.Drawing; using System.Web; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Xml; /// <summary> /// Summary description for RssFeed. /// </summary> public class RssFeed : System.Web.UI.UserControl protected System.Web.UI.WebControls.DataGrid dgPost; private void Page_Load(object sender, System.EventArgs e) if(Cache["RSSFeed"]==null) { DataTable dt=GetRss("http://mydomain.com/rss.xml"); Cache.Insert("RSSFeed",dt,null,DateTime.Now.AddMinutes(20),TimeSpan.Zero) ; dgPost.DataSource = Cache["RSSFeed"]; dgPost.DataBind(); public DataTable GetRss(string str) XmlTextReader xmlr = new XmlTextReader(str); DataSet ds = new DataSet(); ds.ReadXml(xmlr); return ds.Tables[2]; |
/خ