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






3.53/5 (12投票s)
本文介绍了如何在 C# 中使用 WebBrowser 对象读取和维护您喜欢的 RSS 列表

引言
本文旨在解释 C# 中的 WebBrowser
控件如何工作,以及如何使用几个 WebBrowser
控件构建 RSS Feed 阅读器。它还解释了如何使用 System.Xml
命名空间提供的函数来处理 RSS feed XML 文件。
本文创建的应用具有以下功能
- RSS Feed 订阅
- RSS Feed 列表维护
- RSS Feed 阅读器
- 网页阅读器和浏览器
背景
本文的应用是使用 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
控件可以通过多种方式加载页面。可以使用 WebBrowser
的 Navigate(Uri)
函数直接将 URL 加载到 WebBrowser
控件。但是,要加载以编程方式创建的 HTML 内容,我们需要使用以下方法填充 WebBrowser
的 DocumentText
:
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();
}
CanGoForward
和 CanGoBack
属性分别显示向前和向后的历史记录状态。GoBack()
和 GoForward()
函数在已访问页面的历史记录中向前和向后导航。
关注点
该应用程序将订阅的 RSS feed 列表存储在程序 EXE 所在的相同位置的文本文件中。ReadForSpeed
的下一个版本即将推出对 feed 进行标记和存储 feed 内容以供离线使用等功能。
历史
- 版本 1.0.0.0 更新于 2008 年 10 月 6 日