C#+ASP.NET開發基于Web的RSS閱讀器
2024-07-10 12:55:07
供稿:網友
最近我一直在尋找如何在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 = "";
}