dinghao

记录成长点滴

 

请求网址并解析返回的html

目的,把远程服务器传回的Html,解析到类里面,为GridView等提供数据源
找出所有<td>或者<font>中的字符:(?<=<td.*>).+(?=</td>)|(?<=<font.*>).+(?=</font>)
1 、向远程服务器Post数据
public int PostData(string url, string data, out string info)
        
{

            info 
= "";
            CookieContainer cc 
= new CookieContainer();
            HttpWebRequest request 
= WebRequest.Create(url) as HttpWebRequest;
            request.CookieContainer 
= cc;
            request.Method 
= "POST";
            request.ContentType 
= "application/x-www-form-urlencoded";
            Stream requestStream 
= request.GetRequestStream();
            
byte[] byteArray = Encoding.UTF8.GetBytes(data);
            requestStream.Write(byteArray, 
0, byteArray.Length);
            requestStream.Close();
            HttpWebResponse response 
= request.GetResponse() as HttpWebResponse;
            Uri responseUri 
= response.ResponseUri;
            Stream receiveStream 
= response.GetResponseStream();
            Encoding encode 
= System.Text.Encoding.GetEncoding("utf-8");
            StreamReader readStream 
= new StreamReader(receiveStream, encode);
            
string result = readStream.ReadToEnd();
            info 
= result;
            
return 0;

        }
2、解析返回的html,有省略
 public ClassInfo[] GetClass(string html)
        
{

            ArrayList ar 
= new ArrayList();
            ArrayList arr 
= new ArrayList();
            
string table = "";
            Regex regtable 
= new Regex(@"(?<=<table.*>).*?(?=</table>)", RegexOptions.Singleline);
            Match ma 
= regtable.Match(html);
            
while (ma.Success)
            
{
                
if (ma.Value.Trim() != "")
                
{
                    arr.Add(HttpUtility.HtmlDecode(ma.Value));
                }

                ma 
= ma.NextMatch();
            }

            
for (int i = 0; i < arr.Count; i++)
            
{
                table 
= arr[i].ToString() + table;
            }



            Regex reg 
= new Regex(@"(?<=<.*?>).*?(?=<.*?>)", RegexOptions.Singleline);
            Match m 
= reg.Match(table);


            
while (m.Success)
            
{
                
if (m.Value.Trim() != "")
                
{

                    ar.Add(HttpUtility.HtmlDecode(m.Value));
                }

                m 
= m.NextMatch();
            }



           ClassInfo[] ci 
= new ClassInfo[classno];
            
for (int i = 0; i < classno; i++)
            
{
                ci[i] 
= new ClassInfo();
                ci[i].RegisterDate 
= (ar[i * 8 + 0]).ToString();

                ci[i].LoginDate 
= (ar[i * 8 + 1]).ToString();
                ci[i].LogoutDate 
= (ar[i * 8 + 2]).ToString();
                ci[i].UseMin 
= ar[i * 8 + 3].ToString();
                ci[i].ClassName 
= ar[i * 8 + 5].ToString();
                ci[i].ClassType 
= ar[i * 8 + 6].ToString();
                ci[i].Percent 
= ar[i * 8 + 7].ToString();

            }




            
return ci;


        }

3、定义ClassInfo类(课程类),用CodeSmith生成
 public class ClassInfo
    
{
        
Member Variables

        
Constructors

        
Public Properties
    }

posted on 2006-06-19 17:33  思无邪  阅读(2924)  评论(1编辑  收藏  举报

导航