根據html頁面模板動態生成html頁面(c#類)

本文轉載自:http://www.cnblogs.com/yuanbao/archive/2008/01/06/1027985.html點擊打開鏈接

  一直以爲動態生成靜態頁面不好做,昨天在網上找了下,其實很簡單,思路大概是這樣的, 
1:建立一個html頁面模板,在這個頁面中把你想要動態顯示的地方用特殊的字符串表示(如 
$htmlstrstr$); 
2:在程序中用將這個html頁面讀到一個字符串變量如str; 
3:用字符串的resplace方法將在第一步中特殊字符替換成你想要的內容; 
4保存; 
OK,so easy,今天就用C#寫了一個這樣的類,用來處理動態生成html頁面的,自認爲還寫的完 
整,剛接觸.NET不久,望指教

  

注:此類中的代碼不全是原創,部份代碼參照網友的代碼!

以下是轉換類的代碼


代碼 
  1using System; 
  2using System.Text; 
  3using System.Web; 
  4using System.Configuration; 
  5using System.IO; 
  6namespace solucky 
  7{ 
  8    /**//// <summary> 
  9    /// AspxToHtml 的摘要說明。 
 10    /// 注:使用此類,你可以在web.config文件對模板類進行配置.如下 
 11    /**//*<appSettings> 
 12    <add key="templateFilePath" value="htmlmoudel.htm" /> 
 13    <add key="htmlFilePath" value="new/"></add> 
 14    <add key="ErrLogPath" value="aspxTohtml_log.txt"></add>     
 15    </appSettings>*/ 
 16    /**//// </summary> 
 17    public class AspxToHtml 
 18    { 
 19        /**//// <summary> 
 20        /// 模板文件中要替代的參數個數 
 21        /// </summary> 
 22        private int            _templateParamCount=0; 
 23        /**//// <summary> 
 24        /// 模板文件所在的路徑 
 25        /// </summary> 
 26        private string        _templateFilePath  
       =ConfigurationSettings.AppSettings["templateFilePath"]; 
 27        /**//// <summary> 
 28        /// 轉換後的html文件所存放的路徑 
 29        /// </summary> 
 30        private string        _htmlFilePath  
           =ConfigurationSettings.AppSettings["htmlFilePath"]; 
 31         
 32        /**//// <summary> 
 33        /// 模板頁頁面編碼 
 34        /// </summary> 
 35        private Encoding _templateHtmlCode    
         =Encoding.GetEncoding("gb2312"); 
 36 
 37        /**//// <summary> 
 38        /// 轉換後的文件編碼 
 39        /// </summary> 
 40        private Encoding _code = Encoding.GetEncoding("gb2312"); 
 41 
 42        /**//// <summary> 
 43        /// 轉換後的html文件名 
 44        /// </summary> 
 45        private string  _convertedFilename=""; 
 46        /**//// <summary> 
 47        /// 模板文件中的參數 
 48        /// </summary> 
 49        private string[]    _templateFileparameter    ; 
 50         
 51        /**//// <summary> 
 52        /// aspx文件中的要代替HTML文件中的參數實際值 
 53        /// </summary> 
 54        private string[]    _aspxFileparameter; 
 55 
 56        private string _errlogPath = ConfigurationSettings.AppSettings["ErrLogPath"]; 
 57 
 58        屬性#region 屬性 
 59         
 60        /**//// <summary> 
 61        /// 模板文件中要替代的參數個數 
 62        /// </summary> 
 63        public int TemplateParamCount 
 64        { 
 65            get 
 66            { 
 67                return    this._templateParamCount; 
 68            } 
 69            set//分配參數個數時,同時爲模板文件中的參數和aspx文件中的要代替 
HTML文件中的參數實際值這兩個分配實際數組 
 70            { 
 71                if (value < 0)  
 72                    throw new ArgumentException(); 
 73 
 74                if(value>0)                 
 75                { 
 76                    this._templateParamCount=value; 
 77                    //模板文件中的參數                     
 78                    _templateFileparameter    = new string[value]; 
 79                    //aspx文件中的要代替HTML文件中的參數實際值 
 80                    _aspxFileparameter        = new string[value]; 
 81                } 
 82                else 
 83                    this._templateParamCount=0; 
 84            } 
 85        } 
 86         
 87        /**//// <summary> 
 88        /// 模板文件所在的路徑 
 89        ///  
 90        /// </summary> 
 91        public string TemplateFilePath 
 92        { 
 93            get{    return this._templateFilePath;} 
 94            set{    this._templateFilePath=value;} 
 95        } 
 96        /**//// <summary> 
 97        /// 轉換後的html文件所存放的路徑 
 98        /// </summary> 
 99        public string HtmlFilePath 
100        { 
101            get{    return this._htmlFilePath;} 
102            set{    this._htmlFilePath=value;} 
103        } 
104 
105        /**//// <summary> 
106        /// html模板文件編碼 
107        /// </summary> 
108        public Encoding TemplateHtmlCode 
109        { 
110            get{    return this._templateHtmlCode;} 
111            set{    this._templateHtmlCode=Encoding.GetEncoding(value.ToString());} 
112        } 
113        /**//// <summary> 
114        /// 編碼 
115        /// </summary> 
116        public Encoding Code 
117        { 
118            get{    return this._code;} 
119            set{    this._code=Encoding.GetEncoding(value.ToString());} 
120        } 
121        /**//// <summary> 
122        /// 錯誤文件所在路徑 
123        /// </summary> 
124        public string ErrLogPath 
125        { 
126            get{ 
127                if(!(this._errlogPath==null)) 
128                    return this._errlogPath; 
129                else 
130                    return "aspxTohtml_log.txt"; 
131            } 
132            set{this._errlogPath=value;} 
133        } 
134 
135         
136        #endregion 
137         
138        操作#region 操作 
139 
140        /**//// <summary> 
141        /// 獲取轉換後的html文件所在相對文件路徑 
142        /// 如:如果HtmlFilePath="/news/" 
143        /// 轉換後的html文件名爲200505050505.html 
144        /// 則返回的值爲/news/200505050505.html 
145        /// </summary> 
146        /// <remarks>如果在未調用StartConvert方法之前調用此屬性則返回 
null</remarks> 
147        public string HtmlFileVirtualPath 
148        { 
149            get 
150            {     
151                if(!(this._convertedFilename=="")) 
152                    return    this.HtmlFilePath+this._convertedFilename; 
153                else 
154                    return null; 
155            } 
156        } 
157 
158        /**//// <summary> 
159        /// 爲HTML頁面參數數組付值 
160        /// </summary> 
161        /// <param name="param"></param> 
162        public void    setTemplateFileparameter(string[] param) 
163        { 
164            try 
165            { 
166                if(param.Length==this.TemplateParamCount) 
167                    this._templateFileparameter=param; 
168                //else//與原定義的個數不等 
169                    // 
170            } 
171            catch(System.Exception    ex) 
172            { 
173                WriteErrFile(ex); 
174            } 
175        } 
176        /**//// <summary> 
177        /// 爲aspx文件中將要替換html文件中的參數數組付值 
178        /// </summary> 
179        /// <param name="param"></param> 
180        public void setAspxFileparameter(string[] param) 
181        { 
182            try 
183            { 
184                if(param.Length==this.TemplateParamCount) 
185                    this._aspxFileparameter=param; 
186                //else//與原定義的個數不等 
187                // 
188            } 
189            catch(System.Exception    ex) 
190            { 
191            WriteErrFile(ex); 
192            } 
193        } 
194        /**//// <summary> 
195        /// 開始進行aspxTohtml轉換 
196        /// </summary> 
197        /// <returns>返回值爲成功創建後的文件名稱</returns> 
198        /// <remarks>在調用此方法之前必需確定已調用setTemplateFileparameter 和 
setAspxFileparameter方法進行相應的付值操作</remarks> 
199        public string StartConvert() 
200        { 
201            if(this._templateFileparameter.Length==this._aspxFileparameter.Length) 
202            { 
203                return writeFile(); 
204            } 
205            else{ 
206                return null; 
207            } 
208        } 
209        /**//// <summary> 
210        /// 開始進行aspxTohtml轉換 
211        /// </summary> 
212        /// <param name="htmlparam">html模板頁中的所有參數數組</param> 
213        /// <param name="aspxparam">aspx頁面中要代替html模板頁中參數值數組 
</param> 
214        /// <returns>返回值爲成功創建後的文件名稱</returns> 
215        public string StartConvert(string[] htmlparam,string[] aspxparam) 
216        { 
217            //先調用setTemplateFileparameter 和setAspxFileparameter方法,進行付值 
操作 
218            setTemplateFileparameter(htmlparam); 
219            setAspxFileparameter(aspxparam); 
220            // 
221            string fn=this.StartConvert(); 
222            // 
223            _convertedFilename=fn; 
224            // 
225            return fn; 
226        } 
227         
228        /**//// <summary> 
229        /// 用時間加隨機數生成一個文件名 
230        /// </summary> 
231        /// <returns></returns> 
232        private string getfilename() 
233        { 
234            //用時間加隨機數生成一個文件名 
235            System.Threading.Thread.Sleep(50); 
236            string yearStr = System.DateTime.Now.Year.ToString(); 
237            string monthStr = string.Format("{0:0#}",System.DateTime.Now.Month); 
238            string dayStr = string.Format("{0:0#}",System.DateTime.Now.Day);  
239            string hourStr = string.Format("{0:0#}",System.DateTime.Now.Hour); 
240            string minuteStr = string.Format("{0:0#}",System.DateTime.Now.Minute); 
241            string secondStr = string.Format("{0:0#}",System.DateTime.Now.Second); 
242 string millisecondStr = string.Format("{0:000#}",System.DateTime.Now.Millisecond);   
                
243            System.Random rd = new System.Random(); 
244            return yearStr + monthStr + dayStr + hourStr + minuteStr + secondStr +  
millisecondStr + string.Format("{0:0000#}",rd.Next(100))+".html"; 
245            //return DateTime.Now.ToString("yyyyMMddHHmmss")+".html"; 
246        } 
247        /**//// <summary> 
248        /// 進行轉換處理 
249        /// </summary> 
250        /// <returns>返回以時間命名的文件名</returns> 
251        private string writeFile() 
252        { 
253             
254            // 讀取模板文件 
255            string temp = HttpContext.Current.Server.MapPath(this.TemplateFilePath); 
256            StreamReader sr=null;             
257            string str="";  
258            try 
259            { 
260                sr = new StreamReader(temp, this.TemplateHtmlCode); 
261                str = sr.ReadToEnd(); // 讀取文件 
262            } 
263            catch(Exception ex) 
264            { 
265                //HttpContext.Current.Response.Write(exp.Message); 
266                //HttpContext.Current.Response.End();         
267                WriteErrFile(ex); 
268            } 
269            finally 
270            { 
271                sr.Close(); 
272            }             
273            // 替換內容 
274            // 這時,模板文件已經讀入到名稱爲str的變量中了 
275            for(int i=0;i<this.TemplateParamCount;i++) 
276            { 
277                str =str.Replace(this._templateFileparameter[i],this._aspxFileparameter[i]);  
278            }         
279 
280            return savefile(str);  
281        } 
282 
283        /**//// <summary> 
284        ///  
285        /// </summary> 
286        /// <param name="str"></param> 
287        /// <returns></returns> 
288 
289        private string savefile(string str) 
290        { 
291            // 寫文件 
292            StreamWriter sw=null; 
293            try 
294            { 
295                 
296                string path = HttpContext.Current.Server.MapPath(this.HtmlFilePath); 
297                //html文件名稱     
298                string htmlfilename=getfilename(); 
299                sw = new StreamWriter(path + htmlfilename , false, this.Code); 
300                sw.Write(str); 
301                sw.Flush(); 
302                return htmlfilename;  
303            } 
304            catch(Exception ex) 
305            {                 
306                WriteErrFile(ex); 
307            } 
308            finally 
309            { 
310                sw.Close(); 
311            } 
312            return ""; 
313        } 
314 
315        /**//// <summary> 
316        /// 傳入URL返回網頁的html代碼 
317        /// </summary> 
318        /// <param name="Url">URL</param> 
319        /// <returns></returns> 
320        public string getUrltoHtml(string Url) 
321        {             
322            try 
323            { 
324                System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url);    
325                System.Net.WebResponse wResp =wReq.GetResponse();            
326                System.IO.Stream respStream  = wResp.GetResponseStream();      
327                System.IO.StreamReader reader = new System.IO.StreamReader(respStream, System.Text.Encoding.GetEncoding("gb2312")); 
328                return  savefile(reader.ReadToEnd()); 
329 
330            } 
331            catch(System.Exception ex) 
332            { 
333                WriteErrFile(ex); 
334            } 
335            return ""; 
336        } 
337        #endregion 
338 
339 
340        構造#region 構造         
341         
342        public AspxToHtml() 
343        { 
344            // 
345            // TODO: 在此處添加構造函數邏輯 
346            //             
347        } 
348 
349        private void settemplateParamCount(int templateParamCount) 
350        { 
351            if (templateParamCount>0) 
352                this.TemplateParamCount=templateParamCount; 
353        } 
354        /**//// <summary> 
355        /// 提供欲代替的參數個數 
356        /// </summary> 
357        /// <param name="templateParamCount"></param> 
358        public AspxToHtml(int templateParamCount) 
359        {     
360            settemplateParamCount(templateParamCount); 
361             
362        } 
363        /**//// <summary> 
364        ///  
365        /// </summary> 
366        /// <param name="templateParamCount">html模板頁中的參數個數</param> 
367        /// <param name="htmlFilePath">生成的html文件所存放的文件夾路徑</param> 
368        /// <param name="templateFilePath">html模板頁路徑</param> 
369        public AspxToHtml(int templateParamCount,string htmlFilePath,string  
templateFilePath) 
370        { 
371            settemplateParamCount(templateParamCount); 
372            this.HtmlFilePath        =    htmlFilePath; 
373            this.TemplateFilePath    =    templateFilePath; 
374             
375        } 
376        #endregion 
377 
378        #region 
379         
380        /**//// <summary> 
381        /// 把錯誤寫入文件方法#region 把錯誤寫入文件方法 
382        /// </summary> 
383        /// <param name="ee"></param> 
384        private  void WriteErrFile(Exception ee) 
385        { 
386             
387            FileStream fs1 = new  
FileStream(HttpContext.Current.Server.MapPath(ErrLogPath), System.IO.FileMode.Append); 
388            StreamWriter sw1 = new StreamWriter(fs1); 
389            sw1.WriteLine("**************************************************"); 
390            sw1.WriteLine("錯誤日期:" + System.DateTime.Now); 
391            sw1.WriteLine("錯誤描述:" + ee.Message); 
392            sw1.WriteLine("錯誤名稱:" + ee.Source); 
393            sw1.WriteLine("詳細:" + ee.ToString()); 
394            sw1.WriteLine("*************************************************"); 
395            sw1.Close(); 
396        } 
397        #endregion 
398    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章