zoukankan      html  css  js  c++  java
  • 根据html页面模板动态生成html页面(c#类)

      一直以为动态生成静态页面不好做,昨天在网上找了下,其实很简单,思路大概是这样的,
    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    }

  • 相关阅读:
    switch能否作用在作用在byte、long、string上面?
    websocket(转)
    equal和hashcode、==
    List常用方法
    String,Integer,Double等类型互相转换
    BigDecimal的转换和使用
    gitHub常用命令和技巧
    SQL语句
    SpringBoot注解
    vue格式化时间
  • 原文地址:https://www.cnblogs.com/yuanbao/p/1027985.html
Copyright © 2011-2022 走看看