RSS 2.0解析

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Xml;
using System.Collections;
namespace TestRss
{
    class Program
    {
        static void Main(string[] args)
        {
            string Url = "http://rss.sina.com.cn/news/marquee/ddt.xml";
            RSS zhou = new RSS(Url);
        }
    }
    public class RSS
    {
        public string title = "";
        public string link = "";
        public string Description = "";
        public string language = "";
        public string copyright = "";
        public string managingEditor = "";
        public string webMaster = "";
        public string pubDate = "";
        public string lastBuildDate = "";
        public string generator = "";
        public string ttl = "";
        public string rating = "";
        public string skipHours = "";
        public string skipDays = "";
        public RssCloud rssCloud;
        public RssCategory rssCategory = new RssCategory();
        public List<RssItem> listRssItem = new List<RssItem>();
        public List<RssImage> listRssImage = new List<RssImage>();
        public List<RssInput> ListRssInput = new List<RssInput>();
        /// <summary>
        /// 测试函数
        /// </summary>
        /// <param name="strIn">输入参数</param>
        /// <param name="strOut">输出参数</param>
        /// <returns>函数操作成功返回true,失败返回false</returns>
        public RSS(string strIn)
        {
            rssCategory = new RssCategory();
            rssCloud = new RssCloud();
            XmlDocument xmlDocument = new XmlDocument();
            xmlDocument.Load(strIn);
            XmlElement rootElement = (XmlElement)xmlDocument.DocumentElement;
            XmlNode channelXmlNode = rootElement.ChildNodes[0];
            IEnumerator IEnumeratorXmlNode = channelXmlNode.GetEnumerator();
            while (IEnumeratorXmlNode.MoveNext())
            {
                XmlNode xmlNode = (XmlNode)IEnumeratorXmlNode.Current;
                switch (xmlNode.Name)
                {
                    case "generator":
                        generator = xmlNode.InnerText; break;
                    case "ttl":
                        ttl = xmlNode.InnerText; break;
                    case "rating":
                        rating = xmlNode.InnerText; break;
                    case "skipHours":
                        skipHours = xmlNode.InnerText; break;
                    case "skipDays":
                        skipDays = xmlNode.InnerText; break;
                    case "title":
                        title = xmlNode.InnerText; break;
                    case "link":
                        link = xmlNode.InnerText; break;
                    case "Description":
                        Description = xmlNode.InnerText; break;
                    case "copyright":
                        copyright = xmlNode.InnerText; break;
                    case "webMaster":
                        webMaster = xmlNode.InnerText; break;
                    case "pubDate":
                        pubDate = xmlNode.InnerText; break;
                    case "lastBuildDate":
                        lastBuildDate = xmlNode.InnerText; break;
                    case "item":
                        IEnumerator itemTempXmlNode = xmlNode.GetEnumerator();
                        RssItem tempRssItem = new RssItem();
                        while (itemTempXmlNode.MoveNext())
                        {
                            XmlNode itemNode = (XmlNode)itemTempXmlNode.Current;

                            switch (itemNode.Name)
                            {
                                case "title":
                                    tempRssItem.title = itemNode.InnerText; break;
                                case "author":
                                    tempRssItem.author = itemNode.InnerText; break;

                                case "category":
                                    if(itemNode.Attributes.Count>0)tempRssItem.category.domain = itemNode.Attributes[0].Value;
                                    tempRssItem.category.text = itemNode.InnerText; break;
                                case "comments": tempRssItem.comments = itemNode.InnerText; break;
                                case "description": tempRssItem.description = itemNode.InnerText; break;
                                case "enclosure":
                                    tempRssItem.enclosure.url = itemNode.Attributes[0].Value;
                                    tempRssItem.enclosure.length = long.Parse(itemNode.Attributes[1].Value);
                                    tempRssItem.enclosure.type = itemNode.Attributes[2].Value; break;
                                case "guid":
                                    tempRssItem.guid = itemNode.InnerText; break;
                                case "link":
                                    tempRssItem.link = itemNode.InnerText; break;
                                case "source":
                                    tempRssItem.source.url = itemNode.Attributes[0].Value;
                                    tempRssItem.source.text = itemNode.InnerText; break;
                            }
                        }
                        listRssItem.Add(tempRssItem);
                        break;
                    case "image":
                        IEnumerator imageTempXmlNode = xmlNode.GetEnumerator();
                        RssImage tempRssImage = new RssImage();
                        while (imageTempXmlNode.MoveNext())
                        {
                            XmlNode imageNode = (XmlNode)imageTempXmlNode.Current;
                            switch (imageNode.Name)
                            {
                                case "url":tempRssImage.url=imageNode.InnerText; break;
                                case "title":tempRssImage.title=imageNode.InnerText; break;
                                case "link": tempRssImage.link=imageNode.InnerText;break;
                                case "width":tempRssImage.width=int.Parse( imageNode.InnerText); break;
                                case "height": tempRssImage.height = int.Parse(imageNode.InnerText); break;
                                case "description": tempRssImage.description = imageNode.InnerText; break;
                            }

                        }
                        listRssImage.Add(tempRssImage);
                        break;
                    case "textInput":
                        IEnumerator textInputTempXmlNode = xmlNode.GetEnumerator();
                        RssInput tempRssInput = new RssInput();
                        while (textInputTempXmlNode.MoveNext())
                        {
                            XmlNode textInputNode = (XmlNode)textInputTempXmlNode.Current;
                           
                            switch (textInputNode.Name)
                            {
                                case "title": tempRssInput.description = textInputNode.InnerText; break;
                                case "description": tempRssInput.link = textInputNode.InnerText; break;
                                case "name": tempRssInput.name = textInputNode.InnerText; break;
                                case "link": tempRssInput.title = textInputNode.InnerText; break;
                            }
                        }
                        ListRssInput.Add(tempRssInput);
                        break;
                    case "category":
                        IEnumerator categoryTempXmlNode = xmlNode.GetEnumerator();
                        while (categoryTempXmlNode.MoveNext())
                        {
                            XmlNode categoryNode = (XmlNode)categoryTempXmlNode.Current;
                            rssCategory.domain = categoryNode.Attributes[0].Value;
                            rssCategory.text = categoryNode.InnerText;
                        } break;
                    case "cloud":
                        IEnumerator cloudTempXmlNode = xmlNode.GetEnumerator();
                        while (cloudTempXmlNode.MoveNext())
                        {
                            XmlNode cloudNode = (XmlNode)cloudTempXmlNode.Current;
                            rssCloud.domain = cloudNode.Attributes[0].Value;
                            rssCloud.path = cloudNode.Attributes[1].Value;
                            rssCloud.port = int.Parse(cloudNode.Attributes[2].Value);
                            rssCloud.protocol = cloudNode.Attributes[3].Value;
                            rssCloud.registerProcedure = cloudNode.Attributes[4].Value;
                        } break;
                }
            }
        }
    }
    public class RssImage
    {
        public string url = "";
        public string title = "";
        public string link = "";
        public int width = -1;
        public int height = -1;
        public string description = "";

    }
    public class RssItem
    {
        public string title = "";
        public string link = "";
        public string description = "";
        public RssCategory category = new RssCategory();
        public string pubDate = "";
        public string comments = "";
        public RssEnclosure enclosure = new RssEnclosure();
        public string guid = "";
        public string author = "";
        public RssSource source = new RssSource();
    }
    public class RssInput
    {
        public string title = "";
        public string description = "";
        public string name = "";
        public string link = "";

    }
    public class RssCloud
    {
        public string domain = "";
        public int port = -1;
        public string path = "";
        public string registerProcedure = "";
        public string protocol = "";
    }
    public class RssEnclosure
    {
        public string url = "";
        public long length = 0;
        public string type = "";

    }
    public class RssSource
    {
        public string url = "";
        public string text = "";

    }
    public class RssCategory
    {
        public string domain = "";
        public string text = "";
    }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值