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