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

RSS Feed 自定义 Web 控件

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.64/5 (7投票s)

2005年2月12日

2分钟阅读

viewsIcon

61344

downloadIcon

417

一个用于显示 RSS feed 的自定义 Web 控件。

问题所在

Really Simple Syndication (RSS) 是一种轻量级的 XML 格式,旨在共享标题和其他 Web 内容。由于其简单性和标准化,它变得越来越流行。市场上已经有很多非常优秀且全面的 RSS Web 控件。但其中许多控件以网格或表格的形式输出 feed。

解决方案

那么,为什么要创建另一个 RSS Web 控件呢?好吧,如果我们想更好地控制 feed 的输出和显示,并且不想以表格或网格的形式显示 feed 呢?我还觉得现有的控件对于如此简单的问题来说过于复杂。该控件派生自 Repeater,并将公开一个 ItemCount 属性,该属性将限制显示的条目数量。

RSSFeeder 类

大部分功能都位于 DataSource 属性中。通过覆盖 Repeater DataSource 属性的默认行为,我们可以允许分配 RSS feed URL

public override object DataSource
{ 
    get{return base.DataSource;} 
    set 
    {
        if(value is string)
        {
            try
            {
                XmlTextReader xtr = new XmlTextReader(value.ToString());
                DataSet ds = new DataSet();
                ds.ReadXml(xtr);
                xtr.Close();
                base.DataSource = ds.Tables[3];
            }
            catch
            {
                throw new ArgumentException("Url must be a valid rss feed.");
            }
        }
        else
            base.DataSource = value;
    }
}

正如您从上面的代码中看到的,在设置 DataSource 属性时,我们首先检查它是否是 string,如果是,我们假设这是一个 RSS feed 的 URL。我们将其包装在 try-catch 中,以防它不是 URL 或有效的 RSS feed。如果 DataSource 不是 string,那么我们像往常一样分配。我们使用 XmlTextReader 类来读取 XML 字符串并加载到 DataSet 中。然后,我们将第三个表分配给 DataSource

此外,在 DataSource 中,我们还覆盖了 OnItemDataBound 事件。这允许我们计算并限制显示的条目

protected override void OnItemDataBound(RepeaterItemEventArgs e)
{
    if(itemCount != 0 && i > itemCount)
    e.Item.Visible = false;
    i++;
    base.OnItemDataBound(e); 
}

我们首先检查是否设置了 ItemCount 属性,然后检查变量 i 是否未超过它。当 i 超过 ItemCount 时,它会隐藏 feed 中的所有其他条目。

结论

这个控件非常简单但有效。利用 Repeater 控件的灵活性和自定义 Web 控件的自然封装,使其成为一个完美的 RSS 可视化工具。

链接和资源

© . All rights reserved.