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

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();

公共属性


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()
{
}


}
//
}
//

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值