wyf 发表于 2013-2-4 19:20:21

C# 生成RSS通用类

主要用到了几个类文件:
Channel.cs 、ChannelCollection.cs 、 Feed.cs 、 Item.cs  、 ItemCollection.cs
下面给出各个类的源文件:
1、Channel.cs 类

using System;namespace Utility.Rss{    /// <summary>    /// channel   /// </summary>        public class Channel    {      private string _title;      private string _link;      private string _description;      private ItemCollection items = new ItemCollection();      #region 属性      /// <summary>      /// 标题      /// </summary>      public string title      {            get{return _title;}            set{_title = value.ToString();}      }      /// <summary>      /// 链接      /// </summary>      public string link      {            get{return _link;}            set{_link = value.ToString();}      }      /// <summary>      /// 描述      /// </summary>      public string description      {            get{return _description;}            set{_description = value.ToString();}      }      public ItemCollection Items      {            get { return items; }      }      #endregion      public Channel(){}    }//}//
2、ChannelCollection.cs 类
using System;namespace Utility.Rss{    /// <summary>    /// rssChannelCollection 的摘要说明。    /// </summary>    public class ChannelCollection : System.Collections.CollectionBase    {      public Channel this      {            get             {               return ((Channel)(List));             }            set             {               List = value;            }      }      public int Add(Channel item)      {            return List.Add(item);      }      public ChannelCollection()      {                  }    }//}//  3、Feed.cs类

using System;using System.Xml;using System.IO;using System.Net;using System.Text;namespace Utility.Rss{    /// <summary>    /// rssFeed 的摘要说明。    /// </summary>    public class Feed    {      private string _url;      private System.DateTime _lastModified;      private System.DateTime _lastRssDate;      private Channel channel = new Channel();      #region 公共属性      public string url      {            get{return _url;}            set{_url=value;}      }      public System.DateTime lastModified      {            get{return _lastModified;}      }      public System.DateTime lstRssDate      {            set{_lastRssDate=value;}      }      public Channel Channel      {            get { return channel; }      }                #endregion      public Feed()      {      }      public Feed(string url,System.DateTime dt)      {            this._url=url;            this._lastRssDate=dt;      }      public void Read()      {            XmlDocument xDoc=new XmlDocument();            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(_url);            request.Timeout=15000;            request.UserAgent=@"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.40607; .NET CLR 1.1.4322)";            Stream stream;            HttpWebResponse response = (HttpWebResponse)request.GetResponse();            this._lastModified = response.LastModified;            stream = response.GetResponseStream();            StreamReader sr;                //System.Xml.XmlReader = new XmlReader();                //stream=Encoding.Convert(Encoding.GetEncoding("GBK"),Encoding.GetEncoding("gb2312"),Convert.ToSByte(stream));            if(this.Get_CH(response.Headers["Content-Type"].ToString())=="GBK")            {                sr= new StreamReader(stream,System.Text.Encoding.GetEncoding("GB2312"));                xDoc.Load(sr);            }            else            {//                sr= new StreamReader(stream,System.Text.Encoding.UTF8);                xDoc.Load(stream);            }            if(this._lastRssDate<this._lastModified)            {                XmlNodeList xnList=xDoc.DocumentElement["channel"].SelectNodes("item");                //                XmlNodeList xnList=xDoc.SelectNodes("items");                int a= xnList.Count;                foreach(XmlNode xNode in xnList)                {                                    Item rt=new Item();                  rt.title=xNode.SelectSingleNode("title").InnerText.Replace("'","''");                  rt.link=xNode.SelectSingleNode("link").InnerText.Replace("'","''");                  rt.description=xNode.SelectSingleNode("description").InnerText.Replace("'","''");                  try                  {                        rt.pubDate=xNode.SelectSingleNode("pubDate").InnerText;                  }                  catch                  {                        rt.pubDate=this._lastModified.ToString();                  }                  channel.Items.Add(rt);                }            }      }      public string Create()      {            return "";      }      private string Get_CH(string s)      {            int l=s.IndexOf("charset=")+8;            return s.Substring(l,s.Length-l);      }    }//}// 4、Item.cs类

using System;namespace Utility.Rss{    /// <summary>    /// rssItem 的摘要说明。    /// </summary>    public class Item    {      private string _title;      private string _link;      private string _description;      private string _pubDate;      #region 属性      /// <summary>      /// 标题      /// </summary>      public string title      {            get{return _title;}            set{_title=value.ToString();}      }      /// <summary>      /// 链接      /// </summary>      public string link      {            get{return _link;}            set{_link=value.ToString();}      }      /// <summary>      /// 描述      /// </summary>      public string description      {            get{return _description;}            set{_description=value.ToString();}      }      /// <summary>      /// 频道内容发布日期      /// </summary>      public string pubDate      {            get{return _pubDate;}            set{_pubDate=C_Date(value);}      }      #endregion      public Item(){}      private string C_Date(string input)      {            System.DateTime dt;            try            {                dt=Convert.ToDateTime(input);            }            catch            {                dt=System.DateTime.Now;            }            return dt.ToString();      }    }//}// 5、ItemCollection.cs类
using System;namespace Utility.Rss{    /// <summary>    /// rssChannelCollection 的摘要说明。    /// </summary>    public class ItemCollection : System.Collections.CollectionBase    {      public Item this      {            get { return ((Item)(List)); }            set             {               List = value;            }      }      public int Add(Item item)      {            return List.Add(item);      }      public ItemCollection()      {                  }    }//}//  “C#中解析Rss实现思路及通用类”应用的实例:

string strHtml = "";string url = "http://rss.xinhuanet.com/rss/native.xml";Utility.Rss.Feed feed = new Utility.Rss.Feed(url,DateTime.Parse(System.DateTime.Now.AddDays(-1).ToShortDateString()));                  feed.Read();                  strHtml += "[记录数目:"+feed.Channel.Items.Count+"]<br><br>";                  for(int i=0;i<feed.Channel.Items.Count;i++)                  {//                        arr = feed.Channel.Items.title.Split(cSplit);                        strHtml +="<a href="+feed.Channel.Items.link+" target=_blank><B>"+ feed.Channel.Items.title + "</B></a><br>";                        strHtml +="<font color=red>"+feed.Channel.Items.pubDate + "</font><br>";                        strHtml +=""+feed.Channel.Items.description + "<br>";                  }Response.Write(strHtml);
页: [1]
查看完整版本: C# 生成RSS通用类