zoukankan      html  css  js  c++  java
  • 根据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    }

     

  • 相关阅读:
    一个js选项卡
    郁闷
    Object Literals
    typeof and instanceof
    比较好用的日期控件
    很炫的分页
    [转]ASP.NET Web.config配置文件的基本使用方法
    正则匹配 获取QQ空间日志
    漂浮窗(层)JS
    ASP.NET页面事件执行过程(完整版)
  • 原文地址:https://www.cnblogs.com/lanqiu5ge/p/9472235.html
Copyright © 2011-2022 走看看