C#中解析Rss实现思路及通用类--源代码

    技术2022-05-11  55

     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();        属性        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();        公共属性        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;        属性        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

     


    最新回复(0)