首页 > 编程 > .NET > 正文

如何利用.NET Framework使用RSS feed

2024-07-10 13:08:28
字体:
来源:转载
供稿:网友

  如果想利用.net framework来使用rss feed的话,这其实并不复杂。你只需要做下面几步就可以了:

  ◆链接到提供rss feed的网站

  ◆下载feed xml

  ◆将feed的xml装载到允许搜索的对象中

  ◆为你想提取的结点搜索feed的xml

  .net framework提供了内置函数来完成所有的任务。我们所需要做的就是,将这些功能绑定在一起,这样我们就可以使用rss feeds。

  链接到服务器

  我们可以使用webrequest对象链接到服务器上。webrequest对象使你可以在web站点上贴出请求,自从rss通过http传输后,webrequest对象就成了链接服务器最主要的选择了。

  listing a中的代码告诉我们,任何将一个新的webrequest对象与一个url进行连接。

  listing a

//create a webrequest object

webrequest myrequest = webrequest.create(url);

  在这个例子中,也可以用完整url的来取代rss feed中的“url”。下面是msn automotive rss feed的地址:http://rss-feeds.msn.com/autos/autosnews.xml

  下载rss数据

  当我们连接到服务器之后,我们需要下载feed提供的数据。webrequest对象为实现这个目的提供了一个getresponse()方法。webrequest.getresponse()方法返回一个webrequest对象,这个对象根据我们的请求给我们访问服务器的响应。

  在这里我们将用到webresponse(web响应)对象的getresponsestream()方法。这个方法返回一个stream对象,这个对象中包含了服务器所响应的原始rss xml。listing b中的代码告诉我们如何从webrequest(web请求)对象得到webresponse(web响应)对象,和如何从webresponse(web响应)对象得响应流。

  listing b

//get the response from the webrequest

webresponse myresponse = myrequest.getresponse();

//get the response's stream

stream rssstream = myresponse.getresponsestream();

  将rss数据装载到xml文档中

  一旦我们从webresponse(web响应)对象得到了流,我们就将这个流下载到xmldocument对象中了。这样我们就很容易对xml数据进行分析了,并能轻松地从中取值。得到xmldocument装载stream最简单的方法是,创建一个新的xmldocument对象,并将我们的stream传递给load方法。listing c为我们说明了这个方法的使用。

  listing c

//create the xml document

xmldocument document = newxmldocument();

//load the stream into the xmldocument object.

document.load(rssstream);

  分析xml

  这是使用rss feed最难的部分。我们必须使用刚才创建的xmldocument来得到含有我们自己数据的xml结点。我们普遍感兴趣的结点是:

  ◆feed的标题,它存放在feed xml中的/rss/channel/title文件里面

  ◆feed的文章,它存放在feed xml中的/rss/channel/item文件里面。在这个位置可能有多个结点。

  ◆文章的标题,它存放在文章结点中的title里面。

  ◆文章的描述,它存放在文章结点的description里面。

  ◆文章的链接,它存放在文章结点的link里面。

  我们可以使用xmldocument对象内置的selectsinglenode函数和selectnodes函数来得到这些结点。这两个函数都可以接受xpath查询,也都可以返回与查询结果相匹配的一个或多个结点。

  listing d这段代码告诉我们如何使用xmldocument和xpath从rss feed中分析出每个单独的元素。

  listing d

//get an xmldocument object that contains the feed's xml

xmldocument feeddocument =

getxmldocumentfromfeed("http://rss-feeds.msn.com/autos/autosnews.xml");

//create a xmlnamespacemanager for our namespace.

xmlnamespacemanager manager =

newxmlnamespacemanager(feeddocument.nametable);

//add the rss namespace to the manager.

manager.addnamespace("rss", "http://purl.org/rss/1.0/");

//get the title node out of the rss document

xmlnode titlenode =

feeddocument.selectsinglenode("/rss/channel/title", manager);

//get the article nodes

xmlnodelist articlenodes =

feeddocument.selectnodes("/rss/channel/item", manager);

//loop through the articles and extract

// their data.

foreach (xmlnode articlenode in articlenodes)

{

//get the article's title.

string title =

articlenode.selectsinglenode("title", manager).innertext;

//get the article's link

string link =

articlenode.selectsinglenode("link", manager).innertext;

//get the article's description

string description =

articlenode.selectsinglenode("description", manager).innertext;

}

  不是所有的rss feed的创建都是相同的

  如果所有的rss feed都使用相同的格式,它将变得更强大,然而rss feed有许多不同的版本和实现。在这篇文章中描述的格式适合大部分的feed,可能有少部分的rss feed格式与这个格式不同。

中国最大的web开发资源网站及技术社区,
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表