RSS 2.0解析

    技术2022-05-11  64

    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 = "";    }} 


    最新回复(0)