您的位置:首页 > 编程语言 > C#

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

2009-07-14 14:03 519 查看
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()






{



}





}

//



}

//
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: