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

本文介绍如何在C#中解析RSS,提供了一种通用思路,并给出了Channel、ChannelCollection、Feed、Item和ItemCollection等类的源代码,用于处理RSS内容。应用实例和交流邮箱见文中详情。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值