using
System;
using System.Collections.Generic;
using System.Net;
using System.IO;
using System.Xml;
using System.Xml.XPath;
public class RssDoc
{
XmlDocument doc;
List<Hashtable> list;
public RssDoc()
{
}
public RssDoc(XmlDocument doc)
{
this.doc = doc;
Load();
}
/// <summary>
/// 获取网络资源
/// </summary>
/// <param name="url">url</param>
/// <param name="timeOut">timeout(单位秒)</param>
/// <param name="useProxy">是否用代理</param>
public static XmlDocument GetDoc(string url, int timeOut, bool useProxy)
{
XmlDocument _doc = new XmlDocument();
try
{
WebRequest req = WebRequest.Create(url);
if (useProxy)
{
WebProxy proxy = new WebProxy("http://63.149.98.16:80/", true);
req.Proxy = proxy;
}
req.Timeout = timeOut * 1000;
WebResponse res = req.GetResponse();
Stream rssStream = res.GetResponseStream();
_doc.Load(rssStream);
rssStream.Dispose();
res.Close();
}
catch
{
_doc = null;
}
return _doc;
}
private void Load()
{
list = new List<Hashtable>();
XmlNodeList nodes = doc.GetElementsByTagName("item");
if (nodes==null||nodes.Count == 0)
nodes = doc.GetElementsByTagName("entry");
if (nodes == null || nodes.Count == 0)
return;
Hashtable ht;
XmlNodeList ns;
string name;
string date;
foreach (XmlNode node in nodes)
{
ht = new Hashtable();
ns = node.ChildNodes;
try
{
foreach (XmlNode n in ns)
{
name = n.Name.ToLower();
if (name.Contains("link"))
{
if (n.Attributes["href"] != null)
ht["link"] = n.Attributes["href"].Value.Trim();
else ht["link"] = n.InnerText.Trim();
continue;
}
if (name.Contains("title"))
{
ht["title"] = n.InnerText.Trim();
continue;
}
if (name.Contains("category"))
{
if (ht["category"] == null) ht["category"] = n.InnerText.Trim();
else ht["category"] = ht["category"].ToString() + "," + n.InnerText.Trim();
continue;
}
if (name.Contains("date"))
{
date = n.InnerText;
if (date != "")
{
if (date.Contains(",")) date = date.Substring(date.IndexOf(",") + 1);
date = date.Trim();
if (date.Split(' ').Length > 4) date = date.Replace(date.Split(' ')[4], "");
if (date.Contains(".")) date = date.Split('.')[0].Trim();
date = date.Replace("T", " ");
if (date.Substring(date.LastIndexOf(":") + 1).Length > 2)
date = date.Substring(0, date.LastIndexOf(":") + 3);
try { date = DateTime.Parse(date.Trim()).ToString(); }
catch { date = DateTime.Now.ToString(); }
}
else date = DateTime.Now.ToString();
ht["pubdate"] = date;
continue;
}
if (name.Contains("description"))
{
ht["description"] = n.InnerText.Trim();
continue;
}
if (name.Contains("content"))
{
ht["description"] = n.InnerText.Trim();
continue;
}
if (name.Contains("summary"))
{
if (ht["description"] == null) ht["description"] = n.InnerText.Trim();
}
}
}
catch
{
continue;
}
if (ht["link"] == null) ht["link"] = "";
if (ht["title"] == null || ht["title"].ToString() == "") ht["title"] = ht["link"].ToString();
if (ht["category"] == null) ht["category"] = "";
if (ht["pubdate"] == null) ht["pubdate"] = DateTime.Now.ToString();
if (ht["description"] == null) ht["description"] = "";
list.Add(ht);
}
}
public List<Hashtable> Items
{
get
{
return list;
}
}
}
using System.Collections.Generic;
using System.Net;
using System.IO;
using System.Xml;
using System.Xml.XPath;
public class RssDoc
{
XmlDocument doc;
List<Hashtable> list;
public RssDoc()
{
}
public RssDoc(XmlDocument doc)
{
this.doc = doc;
Load();
}
/// <summary>
/// 获取网络资源
/// </summary>
/// <param name="url">url</param>
/// <param name="timeOut">timeout(单位秒)</param>
/// <param name="useProxy">是否用代理</param>
public static XmlDocument GetDoc(string url, int timeOut, bool useProxy)
{
XmlDocument _doc = new XmlDocument();
try
{
WebRequest req = WebRequest.Create(url);
if (useProxy)
{
WebProxy proxy = new WebProxy("http://63.149.98.16:80/", true);
req.Proxy = proxy;
}
req.Timeout = timeOut * 1000;
WebResponse res = req.GetResponse();
Stream rssStream = res.GetResponseStream();
_doc.Load(rssStream);
rssStream.Dispose();
res.Close();
}
catch
{
_doc = null;
}
return _doc;
}
private void Load()
{
list = new List<Hashtable>();
XmlNodeList nodes = doc.GetElementsByTagName("item");
if (nodes==null||nodes.Count == 0)
nodes = doc.GetElementsByTagName("entry");
if (nodes == null || nodes.Count == 0)
return;
Hashtable ht;
XmlNodeList ns;
string name;
string date;
foreach (XmlNode node in nodes)
{
ht = new Hashtable();
ns = node.ChildNodes;
try
{
foreach (XmlNode n in ns)
{
name = n.Name.ToLower();
if (name.Contains("link"))
{
if (n.Attributes["href"] != null)
ht["link"] = n.Attributes["href"].Value.Trim();
else ht["link"] = n.InnerText.Trim();
continue;
}
if (name.Contains("title"))
{
ht["title"] = n.InnerText.Trim();
continue;
}
if (name.Contains("category"))
{
if (ht["category"] == null) ht["category"] = n.InnerText.Trim();
else ht["category"] = ht["category"].ToString() + "," + n.InnerText.Trim();
continue;
}
if (name.Contains("date"))
{
date = n.InnerText;
if (date != "")
{
if (date.Contains(",")) date = date.Substring(date.IndexOf(",") + 1);
date = date.Trim();
if (date.Split(' ').Length > 4) date = date.Replace(date.Split(' ')[4], "");
if (date.Contains(".")) date = date.Split('.')[0].Trim();
date = date.Replace("T", " ");
if (date.Substring(date.LastIndexOf(":") + 1).Length > 2)
date = date.Substring(0, date.LastIndexOf(":") + 3);
try { date = DateTime.Parse(date.Trim()).ToString(); }
catch { date = DateTime.Now.ToString(); }
}
else date = DateTime.Now.ToString();
ht["pubdate"] = date;
continue;
}
if (name.Contains("description"))
{
ht["description"] = n.InnerText.Trim();
continue;
}
if (name.Contains("content"))
{
ht["description"] = n.InnerText.Trim();
continue;
}
if (name.Contains("summary"))
{
if (ht["description"] == null) ht["description"] = n.InnerText.Trim();
}
}
}
catch
{
continue;
}
if (ht["link"] == null) ht["link"] = "";
if (ht["title"] == null || ht["title"].ToString() == "") ht["title"] = ht["link"].ToString();
if (ht["category"] == null) ht["category"] = "";
if (ht["pubdate"] == null) ht["pubdate"] = DateTime.Now.ToString();
if (ht["description"] == null) ht["description"] = "";
list.Add(ht);
}
}
public List<Hashtable> Items
{
get
{
return list;
}
}
}
使用:
XmlDocument doc
=
RssDoc.GetDoc(url,
3
,
false
);
RssDoc rssdoc = new RssDoc(doc);
string title = "" ;
string link = "" ;
string description = "" ;
string cate = "" ;
string time = "" ;
foreach (Hashtable hs in rssdoc.Items)
{
description = hs["description"].ToString();
title = hs["title"].ToString();
link = hs["link"].ToString();
time = hs["pubdate"].ToString();
cate = hs["category"].ToString();
}
RssDoc rssdoc = new RssDoc(doc);
string title = "" ;
string link = "" ;
string description = "" ;
string cate = "" ;
string time = "" ;
foreach (Hashtable hs in rssdoc.Items)
{
description = hs["description"].ToString();
title = hs["title"].ToString();
link = hs["link"].ToString();
time = hs["pubdate"].ToString();
cate = hs["category"].ToString();
}