C#+ASP.NET开发基于Web的RSS阅读器

本文介绍了一种使用C#和ASP.NET在Web页面上显示RSS Feed的方法。通过创建一个简单的处理函数来解析RSS Feed,文章详细说明了如何利用C#进行网络请求、解析XML,并提取RSS Feed中的关键信息。

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

 最近我一直在寻找如何在web页面上显示RSS Feed的方法,我选择 C#和ASP.NET作为工具。我创建了一个简单的处理函数来处理从一个URL获得的RSS Feed。你可以直接使用这个简单的函数,或者改造成你想要的功能。 

  这个函数使用一个字符串rssURL作为它的参数。这个字符串包含了RSS的URL。它使用rssURL的值建立了一个WebRequest项:


System.Net.WebRequest myRequest 
= System.Net.WebRequest.Create(rssURL);

  这个请求的响应将会被放到一个WebResponse对象里:


System.Net.WebResponse myResponse 
= myRequest.GetResponse();

  然后这个WebResponse对象被用来建立一个流来取出XML的值:


System.IO.Stream rssStream 
= myResponse.GetResponseStream();

  然后可以使用一个XmlDocument对象来存储流中的XML内容。XmlDocument对象用来调入XML的内容:


System.Xml.XmlDocument rssDoc 
= new System.Xml.XmlDocument();
rssDoc.Load(rssStream);

  因为RSS Feed不只是一个XML文件,我们可以假设里面包含了一些RSS标准的规定。这里,我们假设使用了RSS 
2.0。你可以从http://blogs.law.harvard.edu/tech/rss里得到规范的详细内容。

  具体的来说,每个项应该在rss
/channel/里。使用XPath表达,一个项节点列表可以如下方式创建: 


System.Xml.XmlNodeList rssItems 
= rssDoc.SelectNodes("rss/channel/item");

  rssItems存储了从RSS里获得所有项节点的信息。这样就可取得内部所需要的信息了。这里,标题、链接和每个项的描述将会被显示。在rssItems中存储的每个项,每个标记(tag)元素都可以用SelectSingleNode方法提取出来。返回的值将被赋给一个XMLNode对象。以下代码获取了一个标题节点:


System.Xml.XmlNode rssDetail;
rssDetail 
= rssItems.Item(i).SelectSingleNode("title");

  现在标记需要被提取出来,使用InnerText完成这项工作。在调用SelectSingleNode之后,可以用rssDetail来测试格式化的RSS XML是否包含某些标记:


if (rssDetail != null{ title = rssDetail.InnerText; } else { title = ""; }

  这样,你就完成了从一个Feed里获取RSS内容的工作。剩下的工作就是调用这个方法来显示Feed的内容了。以下是一个使用ASP.NET完成的完整的例子:


%@ Page Language="C#" %

!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"

<script runat
="server"
public void ProcessRSSItem(string rssURL)
{
 System.Net.WebRequest myRequest 
= System.Net.WebRequest.Create(rssURL);
 System.Net.WebResponse myResponse 
= myRequest.GetResponse();

 System.IO.Stream rssStream 
= myResponse.GetResponseStream();
 System.Xml.XmlDocument rssDoc 
= new System.Xml.XmlDocument();
 rssDoc.Load(rssStream);

 System.Xml.XmlNodeList rssItems 
= rssDoc.SelectNodes("rss/channel/item");

 
string title = "";
 
string link = "";
 
string description = "";

 
for (int i = 0; i < rssItems.Count; i++)
 
{
  System.Xml.XmlNode rssDetail;

  rssDetail 
= rssItems.Item(i).SelectSingleNode("title");
  
if (rssDetail != null)
  
{
   title 
= rssDetail.InnerText;
  }

  
else
  
{
   title 
= "";
  }


  rssDetail 
= rssItems.Item(i).SelectSingleNode("link");
  
if (rssDetail != null)
  
{
   link 
= rssDetail.InnerText;
  }

  
else
  
{
   link 
= "";
  }

rssDetail 
= rssItems.Item(i).SelectSingleNode("link");

if (rssDetail != null)

{

link 
= rssDetail.InnerText;

}


else

{

link 
= "";

}


rssDetail 
= rssItems.Item(i).SelectSingleNode("description");

if (rssDetail != null)

{

description 
= rssDetail.InnerText;

}


else

{

description 
= "";

}


Response.Write(
"<p><b><a href='" + link + "' target='new'>" + title + "</a></b><br/>");

Response.Write(description 
+ "</p>");

}


}


/script>

<html xmlns
="http://www.w3.org/1999/xhtml"

<head runat
="server"

<title>Untitled Page<
/title>

/head>

<body>

<form id
="form1" runat="server"

<div>

%

string rssURL = "http://www.codeguru.com/icom_includes/feeds/codeguru/rss-all.xml";

Response.Write(
"<font size=5><b>Site: " + rssURL + "</b></font><Br />");

ProcessRSSItem(rssURL);

Response.Write(
"<hr />");

rssURL 
= "http://www.developer.com/icom_includes/feeds/special/dev-5.xml";

Response.Write(
"<font size=5><b>Site: " + rssURL + "</b></font><Br />");

ProcessRSSItem(rssURL);

%

/div>

/form>

/body>

/html>
显示结果如下:



 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值