⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rssreader.cs

📁 1.left.aspx下部分实现了读取RDF(RDF format feeds
💻 CS
📖 第 1 页 / 共 2 页
字号:
                                        break;
                                    }
                                case "ttl":
                                    {
                                        rssFeed.Ttl = channelXmlNode.ChildNodes[i].InnerText;
                                        break;
                                    }
                                case "rating":
                                    {
                                        rssFeed.Rating = channelXmlNode.ChildNodes[i].InnerText;
                                        break;
                                    }
                                case "skipHours":
                                    {
                                        rssFeed.Skiphours = channelXmlNode.ChildNodes[i].InnerText;
                                        break;
                                    }
                                case "skipDays":
                                    {
                                        rssFeed.Skipdays = channelXmlNode.ChildNodes[i].InnerText;
                                        break;
                                    }
                                case "managingEditor":
                                    {
                                        rssFeed.ManagingEditor = channelXmlNode.ChildNodes[i].InnerText;
                                        break;
                                    }
                                case "item":
                                    {
                                        rssFeed.Items.Add(this.getRssItem(channelXmlNode.ChildNodes[i]));

                                        // Fire found事件
                                        if (this.ItemAdded != null)
                                        {
                                            this.ItemAdded(this, new EventArgs());
                                        }

                                        break;
                                    }
                            }
                        }

                        // 若设置rdf模式,则channel只包含其有关信息,而不含item节点,item节点在RDF文档中属于根节点的孩子
                        if (this.rdfMode)
                        {
                            for (int i = 0; i < rssXmlNode.ChildNodes.Count; i++)
                            {
                                switch (rssXmlNode.ChildNodes[i].Name)
                                {
                                    case "item":
                                        {
                                            rssFeed.Items.Add(this.getRssItem(rssXmlNode.ChildNodes[i]));

                                            // Fire found事件
                                            if (this.ItemAdded != null)
                                            {
                                                this.ItemAdded(this, new EventArgs());
                                            }

                                            break;
                                        }
                                }
                            }
                        }
                    }
                    else
                    {
                        rssFeed.ErrorMessage = "Unable to find rss <channel> node";

                        // Fire error事件
                        if (this.Error != null)
                        {
                            RssReaderErrorEventArgs args = new RssReaderErrorEventArgs();
                            args.Message = rssFeed.ErrorMessage;
                            this.Error(this, args);
                        }
                    }
                }
                else
                {
                    rssFeed.ErrorMessage = "Unable to find root <rss> node";

                    // Fire error事件
                    if (this.Error != null)
                    {
                        RssReaderErrorEventArgs args = new RssReaderErrorEventArgs();
                        args.Message = rssFeed.ErrorMessage;
                        this.Error(this, args);
                    }
                }
            }
            catch (XmlException err)    // 捕捉异常
            {
                rssFeed.ErrorMessage = "Xml error:  " + err.Message;

                // Fire error事件
                if (this.Error != null)
                {
                    RssReaderErrorEventArgs args = new RssReaderErrorEventArgs();
                    args.Message = rssFeed.ErrorMessage;
                    this.Error(this, args);
                }
                return rssFeed;
            }
            return rssFeed;
        }

        // 从XML节点通过相应子节点创建RSS item
        private RssItem getRssItem(XmlNode xmlNode)
        {
            RssItem rssItem = new RssItem();

            for (int i = 0; i < xmlNode.ChildNodes.Count; i++)
            {
                switch (xmlNode.ChildNodes[i].Name)
                {
                    case "title":
                        {
                            rssItem.Title = xmlNode.ChildNodes[i].InnerText;
                            break;
                        }
                    case "description":
                        {
                            rssItem.Description = xmlNode.ChildNodes[i].InnerText;
                            break;
                        }
                    case "link":
                        {
                            rssItem.Link = xmlNode.ChildNodes[i].InnerText;
                            break;
                        }
                    case "author":
                        {
                            rssItem.Author = xmlNode.ChildNodes[i].InnerText;
                            break;
                        }
                    case "comments":
                        {
                            rssItem.Comments = xmlNode.ChildNodes[i].InnerText;
                            break;
                        }
                    case "pubdate":
                        {
                            rssItem.Pubdate = xmlNode.ChildNodes[i].InnerText;
                            break;
                        }
                    case "guid":
                        {
                            rssItem.Guid = xmlNode.ChildNodes[i].InnerText;
                            break;
                        }
                }
            }

            return rssItem;
        }
    }
    #endregion

    #region Html创建类
    // 此类提供一种简单的方式将 RssFeed对象转化为简单 HTML文档
    public class RssHtmlMaker
    {
        // 公共属性的成员
        private int maxItems = 0;

        // 限制 HTML模板中使用%Items%显示和替换的 items的数量
        public int MaxItems
        {
            get
            {
                return this.maxItems;
            }
            set
            {
                this.maxItems = value;
            }
        }

        // 创建HTML文档
        public string GetHtmlContents(RssFeed Feed, string Template, string ItemPrefix, string ItemSuffix)
        {
            string result = Template;

            // 替换所有模板令牌
            result = result.Replace("%Title%", Feed.Title);
            result = result.Replace("%Description%", Feed.Description);
            result = result.Replace("%Link%", Feed.Link);
            result = result.Replace("%Language%", Feed.Language);
            result = result.Replace("%Copyright%", Feed.Copyright);
            result = result.Replace("%Webmaster%", Feed.Webmaster);
            result = result.Replace("%PubDate%", Feed.PubDate);
            result = result.Replace("%LastBuildDate%", Feed.LastBuildDate);
            result = result.Replace("%Category%", Feed.Category);
            result = result.Replace("%Generator%", Feed.Generator);
            result = result.Replace("%Ttl%", Feed.Ttl);
            result = result.Replace("%Rating%", Feed.Rating);
            result = result.Replace("%Skiphours%", Feed.Skiphours);
            result = result.Replace("%Skipdays%", Feed.Skipdays);
            result = result.Replace("%ManagingEditor%", Feed.ManagingEditor);

            // 解析item模板
            string itemsContent = "";
            string tempContent = "";

            if(maxItems == 0 || maxItems > Feed.Items.Count)
            {
                maxItems = Feed.Items.Count;
            }

            for (int i = 0; i < maxItems; i++)
            {
                // 解析前缀模板
                tempContent = ItemPrefix;
                tempContent = tempContent.Replace("%Title%", Feed.Items[i].Title);
                tempContent = tempContent.Replace("%Description%", Feed.Items[i].Description);
                tempContent = tempContent.Replace("%Link%", Feed.Items[i].Link);
                tempContent = tempContent.Replace("%Author%", Feed.Items[i].Author);
                tempContent = tempContent.Replace("%Comments%", Feed.Items[i].Comments);
                tempContent = tempContent.Replace("%Pubdate%", Feed.Items[i].Pubdate);
                tempContent = tempContent.Replace("%Guid%", Feed.Items[i].Guid);

                itemsContent += tempContent;

                // 解析后缀模板
                tempContent = ItemSuffix;
                tempContent = tempContent.Replace("%Title%", Feed.Items[i].Title);
                tempContent = tempContent.Replace("%Description%", Feed.Items[i].Description);
                tempContent = tempContent.Replace("%Link%", Feed.Items[i].Link);
                tempContent = tempContent.Replace("%Author%", Feed.Items[i].Author);
                tempContent = tempContent.Replace("%Comments%", Feed.Items[i].Comments);
                tempContent = tempContent.Replace("%Pubdate%", Feed.Items[i].Pubdate);
                tempContent = tempContent.Replace("%Guid%", Feed.Items[i].Guid);

                itemsContent += tempContent;
            }

            // 用items替换%items%
            result = result.Replace("%Items%",itemsContent);

            return result;
        }
    }
    #endregion

    #region 数据结构
    // 表示一个RSS feed属性的数据结构
    [Serializable()]
    public struct RssFeed
    {
        public string Title;        // 频道名字
        public string Description;  // 频道描述
        public string Link;         // HTML 站点相应频道的 URL

        // 可选的项目

        public string Language;     // 频道所用语言
        public string Copyright;    // 频道内容版权
        public string Webmaster;    // 负责频道内容技术问题的 Email地址
        public string PubDate;      // 频道内容出版日期
        public string LastBuildDate;// 频道内容上次更改时间
        public string Category;     // 频道所属种类
        public string Generator;    // 标志形成频道所用程序的字符串
        public string Ttl;          // 刷新缓冲时间
        public string Rating;       // 频道 PICS等级
        public string Skiphours;    // 线索
        public string Skipdays;     
        public string ManagingEditor;// 负责编辑内容的 Email地址
        public RssItems Items;      // RssItem 类型的collection,有RSS feed中的各item
        public string ErrorMessage; // 包含错误
    }

    // 表示RSS feed中单一RSS item的数据结构
    [Serializable()]
    public struct RssItem
    {
        public string Title;        // 题目URL
        public string Description;  // 大纲
        public string Link;         // URL
        public string Author;       // 作者
        public string Comments;     // 注释
        public string Pubdate;      // 发表日期
        public string Guid;         // item 唯一标志符
    }

    // 表示RSS feed中RSS items的一个collection
    [Serializable()]
    public class RssItems : CollectionBase
    {
        public RssItem this[int item]
        {
            get
            {
                return this.getItem(item);
            }
        }

        public void Add(RssItem rssItem)
        {
            List.Add(rssItem);
        }

        public bool Remove(int index)
        {
            if (index > Count - 1 || index < 0)
			{	
				return false;
			}
			else
			{
				List.RemoveAt(index);
				return true;
			}
        }

        private RssItem getItem(int Index)
		{
			return (RssItem) List[Index];
		}
    }
    #endregion
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -