65.9K
CodeProject 正在变化。 阅读更多。
Home

C#: 用于从桌面浏览和读取 RSS Feed 的应用程序

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.53/5 (12投票s)

2008年6月9日

CPOL

4分钟阅读

viewsIcon

84756

downloadIcon

5078

本文介绍了如何在 C# 中使用 WebBrowser 对象读取和维护您喜欢的 RSS 列表

ReadForSpeed-Source

引言

本文旨在解释 C# 中的 WebBrowser 控件如何工作,以及如何使用几个 WebBrowser 控件构建 RSS Feed 阅读器。它还解释了如何使用 System.Xml 命名空间提供的函数来处理 RSS feed XML 文件。

本文创建的应用具有以下功能

  1. RSS Feed 订阅
  2. RSS Feed 列表维护
  3. RSS Feed 阅读器
  4. 网页阅读器和浏览器

背景

本文的应用是使用 Visual Studio 2008 开发的,但基于 .NET Framework 2.0。它可以使用 .NET Framework 3.0 和 3.5 直接构建和运行。

Using the Code

本文中的代码使用 WebBrowser 控件,该控件将在文章后面详细介绍。代码接收一个 RSS Feed 链接,并将其添加到 LHS 窗格的 Web 内容中。单击 RHS 窗格中的任何 feed,都会在格式化使用 XPathNavigator 后,加载相应的 feed 到 RHS 顶部窗格。单击此窗格中的任何 feed 链接,都会重定向到 RHS 底部窗格加载相应的页面。用户可以通过单击此页面上的其他链接,进一步浏览此窗格中的其他页面。用户可以使用工具栏中的“前进”和“后退”按钮在浏览过的页面之间来回导航。

现在,我们来看 WebBrowser 控件。此控件为我们提供了构建 Web 浏览应用程序所需的所有功能。我将介绍本文构建的应用程序中使用的所有方法和属性。但首先,让我们看看如何获取和处理 RSS Feed 链接提供的页面。

由于 RSS feed 是 XML,我们需要使用 XML 对象来处理它。为此,我们需要导入 System.Xml 命名空间。

using System.Xml;

然后我们需要创建一个 XML 文档并将 RSS 内容加载到其中

XmlDocument RSSXml = new XmlDocument();
RSSXml.Load(txtURL.Text);

然后我们需要从该 XML 文档中获取节点列表,这些节点可用于显示 feed 内容。之后,我们遍历每个节点并从中提取显示相关信息,如标题、链接和描述。

XmlNodeList RSSNodeList = RSSXml.SelectNodes("rss/channel/item");
StringBuilder sb = new StringBuilder();
foreach (XmlNode RSSNode in RSSNodeList)
{
    XmlNode RSSSubNode;
    RSSSubNode = RSSNode.SelectSingleNode("title");
    string title = RSSSubNode != null ? RSSSubNode.InnerText : "";
    RSSSubNode = RSSNode.SelectSingleNode("link");
    string link = RSSSubNode != null ? RSSSubNode.InnerText : "";
    RSSSubNode = RSSNode.SelectSingleNode("description");
    string desc = RSSSubNode != null ? RSSSubNode.InnerText : "";
    sb.Append("<font face='arial'><p><b><a href='");
    sb.Append(link);
    sb.Append("'>");
    sb.Append(title);
    sb.Append("</a></b><br/>");
    sb.Append(desc);
    sb.Append("</p></font>");
}

最后,字符串构建器包含 RSS feed 的内容,格式化为 HTML。这就是我们开始使用 WebBrowser 控件的地方。WebBrowser 控件可以通过多种方式加载页面。可以使用 WebBrowserNavigate(Uri) 函数直接将 URL 加载到 WebBrowser 控件。但是,要加载以编程方式创建的 HTML 内容,我们需要使用以下方法填充 WebBrowserDocumentText

RSSBrowser.DocumentText = sb.ToString();

现在我们需要学习如何让两个浏览器控件之间进行通信。默认情况下,如果单击 WebBrowser 控件中加载的页面上的链接,它会在同一控件中加载目标页面。如果我们希望它在另一个浏览器中加载内容,我们需要阻止此控件并调用其他控件的导航。

为此,我们需要了解 WebBrowser 控件的 Navigating 事件。此事件在 WebBrowser 控件开始导航到新页面之前触发。可以通过将事件参数的 Cancel 值设置为 true 来停止导航,如下面的代码所示:

private void RSSList_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
    if (!m_bFromLoadEvent)
    {
        e.Cancel = true;
        NetBrowser.Navigate(e.Url);
    }
    else
    {
        m_bFromLoadEvent = false;
    }
}

此代码基于布尔值,会阻止当前对象的导航,并将目标 URL 导航到另一个 WebBrowser 控件 NetBrowser。这就是给定应用程序中不同窗格之间进行通信的方式。

最后,我们需要学习如何来回导航 WebBrowser 控件已访问过的页面。这很简单,可以通过以下方式完成:

if (NetBrowser.CanGoBack)
{
    NetBrowser.GoBack();
}

if (NetBrowser.CanGoForward)
{
    NetBrowser.GoForward();
}

CanGoForwardCanGoBack 属性分别显示向前和向后的历史记录状态。GoBack()GoForward() 函数在已访问页面的历史记录中向前和向后导航。

关注点

该应用程序将订阅的 RSS feed 列表存储在程序 EXE 所在的相同位置的文本文件中。ReadForSpeed 的下一个版本即将推出对 feed 进行标记和存储 feed 内容以供离线使用等功能。

历史

  • 版本 1.0.0.0 更新于 2008 年 10 月 6 日
© . All rights reserved.