在VS2010中完成
1.数据结构
/// <summary>
/// 数据成员
/// </summary>
public class rss
{
public string Title;
public List<Item> Items=new List<Item>();
}
public class Item
{
public string Title;
public string Description;
public string PubDate;
}
public class Weather
{
public DateTime WeatherDate;
public DateTime PubDate;
public string Temp;
public string Wind;
public string Cloud;
}
2.功能实现
- 读取RSS源,将读到的文档相关标签的内容存入类rss中,函数ReadXml,具体参考我的另一边博文----C#解析RSS新闻源
-
将rss数据中的变量存储为天气所需要的特定类型,也即是类Weather,实现代码SetWeather public List<Weather> SetWeather(string where)
{
rss rss = new rss();
switch (where)
{
case "南京":
rss = ReadXml("http://weather.raychou.com/?/detail/58238/count_3/rss");
break;
case "北京":
rss = ReadXml("http://weather.raychou.com/?/detail/54511/count_3/rss");
break;
case "上海":
rss = ReadXml("http://weather.raychou.com/?/detail/58367/count_3/rss");
break;
case "广东":
rss = ReadXml("http://weather.raychou.com/?/detail/59287/count_3/rss");
break;
case "重庆":
rss = ReadXml("http://weather.raychou.com/?/detail/57516/count_3/rss");
break;
case "厦门":
rss = ReadXml("http://weather.raychou.com/?/detail/59134/count_3/rss");
break;
case "杭州":
rss = ReadXml("http://weather.raychou.com/?/detail/58457/count_3/rss");
break;
case "大连":
rss = ReadXml("http://weather.raychou.com/?/detail/54662/count_3/rss");
break;
}
List<Weather> weather = new List<Weather>();
Weather weather_one = new Weather();
for (int i = 0; i < rss.Items.Count; i++)
{
weather_one.WeatherDate = DateTime.Parse(rss.Items[i].Title);
weather_one.PubDate = DateTime.Parse(rss.Items[i].PubDate);
string[] sArray = rss.Items[i].Description.Split(' ');
weather_one.Cloud=sArray[0].ToString();
if (weather_one.Cloud.Contains("雪"))
weather_one.Cloud = "雪";
else if (weather_one.Cloud.Contains("雨") && weather_one.Cloud.Contains("雪") == false)
weather_one.Cloud = "雨";
else if (weather_one.Cloud.Contains("阴") && weather_one.Cloud.Contains("雨") == false && weather_one.Cloud.Contains("雪") == false)
weather_one.Cloud = "阴";
else if (weather_one.Cloud.Contains("云") && weather_one.Cloud.Contains("阴") == false && weather_one.Cloud.Contains("雨") == false && weather_one.Cloud.Contains("雪") == false)
weather_one.Cloud = "云";
else if (weather_one.Cloud.Contains("晴") && weather_one.Cloud.Contains("云") == false && weather_one.Cloud.Contains("阴") == false && weather_one.Cloud.Contains("雨") == false && weather_one.Cloud.Contains("雪") == false)
weather_one.Cloud = "晴";
else
weather_one.Cloud = "世界末日到了!";
weather_one.Temp=sArray[1].ToString();//情 云 雨 雪 阴
weather_one.Wind=sArray[2].ToString();
weather.Add(weather_one);
}
return weather;
}
返回的是一个list<Weather> - 最后就可以生成一个简单的天气预报Web Server
-
完整代码如下using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Xml;
namespace WebApplication1
{
/// <summary>
/// Rss 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
// [System.Web.Script.Services.ScriptService]
public class Rss : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
/*public string GetWind(DateTime date)
{
}
[WebMethod]
public int GetTemp(DateTime date)
{
}*/
public rss ReadXml(string uri)
{
XmlTextReader Reader = new XmlTextReader(uri);
// XmlValidatingReader Valid = new XmlValidatingReader(Reader);
// Valid.ValidationType = ValidationType.None;
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Reader);
XmlNode rssNode = FoundChildNode(xmlDoc, "rss");
XmlNode channelNode = FoundChildNode(rssNode, "channel");
rss channel = new rss();
//channel.Items = new List<rss.Item>();
for (int i = 0; i < channelNode.ChildNodes.Count; i++)
{
switch (channelNode.ChildNodes[i].Name)
{
case "title":
{
channel.Title = channelNode.ChildNodes[i].InnerText;
break;
}
case "item":
{
Item item = this.getRssItem(channelNode.ChildNodes[i]);
channel.Items.Add(item);
break;
}
}
}
return channel;
}
private XmlNode FoundChildNode(XmlNode Node, string Name)
{
XmlNode childlNode = null;
for (int i = 0; i < Node.ChildNodes.Count; i++)
{
if (Node.ChildNodes[i].Name == Name && Node.ChildNodes[i].ChildNodes.Count > 0)
{
childlNode = Node.ChildNodes[i];
return childlNode;
}
}
return childlNode;
}
private Item getRssItem(XmlNode Node)
{
Item item = new Item();
for (int i = 0; i < Node.ChildNodes.Count; i++)
{
if (Node.ChildNodes[i].Name == "title")
{
item.Title = Node.ChildNodes[i].InnerText;
}
else if (Node.ChildNodes[i].Name == "description")
{
item.Description = Node.ChildNodes[i].InnerText;
}
else if (Node.ChildNodes[i].Name == "pubDate")
{
item.PubDate = Node.ChildNodes[i].InnerText;
}
}
return item;
}
[WebMethod]
public List<Weather> SetWeather(string where)
{
rss rss = new rss();
switch (where)
{
case "南京":
rss = ReadXml("http://weather.raychou.com/?/detail/58238/count_3/rss");
break;
case "北京":
rss = ReadXml("http://weather.raychou.com/?/detail/54511/count_3/rss");
break;
case "上海":
rss = ReadXml("http://weather.raychou.com/?/detail/58367/count_3/rss");
break;
case "广东":
rss = ReadXml("http://weather.raychou.com/?/detail/59287/count_3/rss");
break;
case "重庆":
rss = ReadXml("http://weather.raychou.com/?/detail/57516/count_3/rss");
break;
case "厦门":
rss = ReadXml("http://weather.raychou.com/?/detail/59134/count_3/rss");
break;
case "杭州":
rss = ReadXml("http://weather.raychou.com/?/detail/58457/count_3/rss");
break;
case "大连":
rss = ReadXml("http://weather.raychou.com/?/detail/54662/count_3/rss");
break;
}
List<Weather> weather = new List<Weather>();
Weather weather_one = new Weather();
for (int i = 0; i < rss.Items.Count; i++)
{
weather_one.WeatherDate = DateTime.Parse(rss.Items[i].Title);
weather_one.PubDate = DateTime.Parse(rss.Items[i].PubDate);
string[] sArray = rss.Items[i].Description.Split(' ');
weather_one.Cloud=sArray[0].ToString();
if (weather_one.Cloud.Contains("雪"))
weather_one.Cloud = "雪";
else if (weather_one.Cloud.Contains("雨") && weather_one.Cloud.Contains("雪") == false)
weather_one.Cloud = "雨";
else if (weather_one.Cloud.Contains("阴") && weather_one.Cloud.Contains("雨") == false && weather_one.Cloud.Contains("雪") == false)
weather_one.Cloud = "阴";
else if (weather_one.Cloud.Contains("云") && weather_one.Cloud.Contains("阴") == false && weather_one.Cloud.Contains("雨") == false && weather_one.Cloud.Contains("雪") == false)
weather_one.Cloud = "云";
else if (weather_one.Cloud.Contains("晴") && weather_one.Cloud.Contains("云") == false && weather_one.Cloud.Contains("阴") == false && weather_one.Cloud.Contains("雨") == false && weather_one.Cloud.Contains("雪") == false)
weather_one.Cloud = "晴";
else
weather_one.Cloud = "世界末日到了!";
weather_one.Temp=sArray[1].ToString();//情 云 雨 雪 阴
weather_one.Wind=sArray[2].ToString();
weather.Add(weather_one);
}
return weather;
}
}
/// <summary>
/// 数据成员
/// </summary>
public class rss
{
public string Title;
public List<Item> Items=new List<Item>();
}
public class Item
{
public string Title;
public string Description;
public string PubDate;
}
public class Weather
{
public DateTime WeatherDate;
public DateTime PubDate;
public string Temp;
public string Wind;
public string Cloud;
}
}