主要用到了几个类文件:
Channel.cs 、ChannelCollection.cs 、 Feed.cs 、 Item.cs 、 ItemCollection.cs
下面给出各个类的源文件:
1、Channel.cs 类
using System; namespace Utility.Rss { /// <summary> /// channel /// </summary> [Serializable()] 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[int index] { get { return ((Channel)(List[index])); } set { List[index] = 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[int index] { get { return ((Item)(List[index])); } set { List[index] = 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[i].title.Split(cSplit); strHtml +=" <a href="+feed.Channel.Items[i].link+" target=_blank><B>"+ feed.Channel.Items[i].title + "</B></a><br>"; strHtml +=" <font color=red>"+feed.Channel.Items[i].pubDate + "</font><br>"; strHtml +=" "+feed.Channel.Items[i].description + "<br>"; } Response.Write(strHtml);