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

    一直以为动态生成静态页面不好做,昨天在网上找了下,我晕,其实很简单,思路大概是这样的,
    1:建立一个html页面模板,在这个页面中把你想要动态显示的地方用特殊的字符串表示(如$htmlstrstr$);
    2:在程序中用将这个html页面读到一个字符串变量如str;
    3:用字符串的resplace方法将在第一步中特殊字符替换成你想要的内容;
    4保存;
    OK,so easy,今天就用C#写了一个这样的类,用来处理动态生成html页面的,自认为还写的完整,刚接触.NET不久,望指教,完整代码与示例在此下载:下载https://files.cnblogs.com/solucky/aspxTohtml.rar

    转贴请注明出处,谢谢!
    注:此类中的代码不全是原创,部份代码参照网友的代码!

    以下是转换类的代码


    代码
      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    }
    399}
    400

  • 相关阅读:
    C#缓存
    js 日期相减
    无法加载图片信息处理
    一些经营性的文章,写得不蛮不错
    集线器、交换机、路由器的区别
    存储过程使用建议
    存储过程优点和缺点
    杀人游戏规则介绍(1.0~5.0版本)
    C#网络编程(1) 来源出网络的资源收集
    谈谈外包软件项目的经验
  • 原文地址:https://www.cnblogs.com/kingeric/p/609482.html
Copyright © 2011-2022 走看看