Rss是 Web 2.0 时代的主要特征,那么有没有一种通用的方法来解析Rss呢?
当然有了,呵呵。下面给出了一种思路,仅供参考!
主要用到了几个类文件:
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() ...{ } }//} //
注:
应用实例请参考这里
仅供参考,欢迎交换意见 :Com.LXJ@163.com
