科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件如何利用.NET Framework使用RSS feed

如何利用.NET Framework使用RSS feed

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

作者:builder.com.cn 2007年4月29日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

将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格式与这个格式不同。如果你想获得RSS格式的更多信息,可以查看O’Reilly的摘要

责任编辑:张琎

查看本文国际来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章