C#+ASP.NET开发基于Web的RSS阅读器
最近,我一直在寻找在网页上显示RSS提要的方法。我选择C#和ASP.net作为工具。我创建了一个简单的处理函数来处理从URL获得的RSS提要。你可以直接使用这个简单的函数,或者把它转换成你想要的函数。
此函数使用字符串rssURL作为其参数。该字符串包含RSS的URL。它使用rssURL的值来构建WebRequest项:
系统。Net.WebRequest myRequest = System。net . webrequest . create(RSS URL);
对此请求的响应将放在WebResponse对象中:
系统。net . WebResponse my response = my request。GetResponse();
然后,这个WebResponse对象用于构建一个流来获取XML的值:
系统。IO.Stream rssStream = myResponse。GetResponseStream();
然后,可以使用XMLDocument对象将XML内容存储在流中。XmlDocument对象用于调入XML的内容:
系统。XmlDocument rssDoc =新系统。XML . XML document();
rssDoc。load(RSS stream);
因为RSS提要不仅仅是一个XML文件,所以我们可以假设它包含一些RSS标准。这里,我们假设使用RSS 2.0。你可以从http://blogs.law.harvard.edu/tech/rss.得到说明书的细节
具体来说,每个条目都应该在rss/channel/中。使用XPath表达式,可以创建一个项目节点列表,如下所示:
系统。Xml.XmlNodeList rssItems = rssDoc。select nodes(" RSS/channel/item ");
RssItems存储从RSS获取所有项目节点的信息。通过这种方式,我们可以在内部获得我们需要的信息。这里将显示每个项目的标题、链接和描述。存储在rssItems中的每个项目和标记元素都可以通过SelectSingleNode方法提取。返回值将被赋给一个XMLNode对象。下面的代码获取一个标题节点:
系统。Xml . XmlNode rssDetail
rssDetail = rssItems。项目(一)。SelectSingleNode(" title ");
现在需要提取标签。使用InnerText可以做到这一点。在调用SelectSingleNode之后,可以使用rssDetail来测试格式化的RSS XML是否包含一些标签:
if (rssDetail!= null) { title = rssDetail。InnerText} else { title =}
这样,您就完成了从一个提要获取RSS内容。剩下的工作就是调用这个方法来显示提要的内容。下面是一个使用ASP的完整例子。网络:
< %@ Page Language="C# " >
< script runat = " server " >
public void processors sitem(string RSS URL)
{
System。Net.WebRequest myRequest = System。net . webrequest . create(RSS URL);
系统。net . WebResponse my response = my request。GetResponse();
系统。IO.Stream rssStream = myResponse。GetResponseStream();
系统。XmlDocument rssDoc =新系统。XML . XML document();
rssDoc。load(RSS stream);
系统。Xml.XmlNodeList rssItems = rssDoc。select nodes(" RSS/channel/item ");
string title =
string link = " ";
string description = " ";
for(int I = 0;i < rssItems。数数;i++)
{
系统。Xml . XmlNode rssDetail
rssDetail = rssItems。项目(一)。SelectSingleNode(" title ");
if (rssDetail!= null)
{
title = RSS detail。InnerText
}
else
{
title = " ";
}
rssDetail = rssItems。项目(一)。SelectSingleNode(" link ");
if (rssDetail!= null)
{
link = RSS detail。InnerText
}
else
{
link = " ";
}
rssDetail = rssItems。项目(一)。SelectSingleNode(" description ");
if (rssDetail!= null)
{
description = RSS detail。InnerText
}
else
{
description = " ";
}
回应。写("+link+" ' target = ' new ' > "+title+" < br/> ");
响应。写(描述+"
}
}
< html xmlns = " http://www . w3 . org/1999/XHTML " >
< head runat = " server " >
< title >无标题页面
< body >
< form id = " form 1 " runat = " server " >
< div >
< %
string RSS URL = " http://www
响应。编写(" < font size = 5 > < b > Site:"+RSS URL+" < Br/> ");
processrsstitem(RSS URL);
响应。写(" < HR/> ");
RSS URL = " http://www . developer . com/ICOM _ includes/feeds/special/dev-5 . XML ";
响应。编写(" < font size = 5 > < b > Site:"+RSS URL+" < Br/> ");
processrsstitem(RSS URL);
% >