zoukankan      html  css  js  c++  java
  • asp.net生成静态页面

      1 public class HtmlGengerate
      2     {
      3         public void GengerateHtml()
      4         { 
      5             // 声明控件的正则表达式
      6             Regex regRepeat = new Regex("<!--Repeat(.*)RepeatEnd-->", RegexOptions.IgnoreCase);
      7 
      8             // 声明替换的正则表达式
      9             Regex regReplaceBlank = new Regex(">(\\s+)<", RegexOptions.IgnoreCase);
     10             Regex regReplaceLine = new Regex("\\s\\n", RegexOptions.IgnoreCase);
     11 
     12             // 取根目录
     13             string strRoot = HttpContext.Current.Request.PhysicalApplicationPath;
     14 
     15             // 声明模板文件源码字符串
     16             string strStatic = regReplaceBlank.Replace(regReplaceLine.Replace(File.ReadAllText(strRoot + "Static.htm", System.Text.Encoding.UTF8), ""), "><");
     17             string strStaticDetail = regReplaceBlank.Replace(regReplaceLine.Replace(File.ReadAllText(strRoot + "StaticDetail.htm", System.Text.Encoding.UTF8), ""), "><");
     18             
     19             // 生成列表页
     20             Match mRepeat = regRepeat.Match(strStatic);
     21             if (mRepeat.Success)
     22             { 
     23                 // 替换Repeat控件
     24                 strStatic = strStatic.Replace(mRepeat.Value, GengerateRepeat(mRepeat.Value));
     25 
     26                 // 生成StaticMain.htm
     27                 File.WriteAllText(strRoot + "StaticMain.htm", strStatic, System.Text.Encoding.UTF8);
     28             }
     29 
     30             // 生成详细页
     31             // 获取数据源
     32             DataSet ds = OpOleDb.GetDataSet(OpOleDb.connStr, "select * from Test", null);
     33 
     34             foreach (DataRow dr in ds.Tables[0].Rows)
     35             {
     36                 // 声明一个新的字符串,用来替换数据标签并最终生成文件
     37                 string strTmpDetail = strStaticDetail;
     38 
     39                 // 循环替换标签
     40                 foreach (DataColumn dc in ds.Tables[0].Columns)
     41                 {
     42                     strTmpDetail = strTmpDetail.Replace("{" + dc.ColumnName + "}", dr[dc.ColumnName].ToString());
     43                 }
     44 
     45                 // 生成文件
     46                 File.WriteAllText(strRoot + "StaticDetail_" + dr["Id"].ToString() + ".htm", strTmpDetail, System.Text.Encoding.UTF8);
     47             }
     48         }
     49 
     50         private string GengerateRepeat(string source)
     51         {
     52             string html = "";
     53 
     54             // 声明strStratTag和strEndTag
     55             string strStartTag = "<!--Repeat{";
     56             string strEndTag = "<!--RepeatEnd-->";
     57             string strSql = "";
     58 
     59             // 替换title的正则表达式,用于提取控件{}内的sql查询字符串
     60             Regex regReplaceTitle = new Regex("<!--(\\w{3,7}){(.*)}-->", RegexOptions.IgnoreCase);
     61 
     62             // 提取strSql,并将source的值去掉标签部分
     63             Match mTitle = regReplaceTitle.Match(source);
     64             if (mTitle.Success)
     65             {
     66                 strSql = mTitle.Value.Replace(strStartTag, "").Replace("}-->", "");
     67                 source = source.Replace(mTitle.Value, "").Replace(strEndTag, "");
     68             }
     69 
     70             // 取数据源
     71             if (strSql != "")
     72             {
     73                 DataSet ds = OpOleDb.GetDataSet(OpOleDb.connStr, strSql, null);
     74                 if (ds.Tables.Count > 0)
     75                 {
     76                     if (ds.Tables[0].Rows.Count > 0)
     77                     {
     78                         foreach (DataRow dr in ds.Tables[0].Rows)
     79                         { 
     80                             // 声明一个临时字符串,用于保存替换过后的值
     81                             string strTmp = source;
     82 
     83                             // 循环替换临时字符串中的数据标签
     84                             foreach (DataColumn dc in ds.Tables[0].Columns)
     85                             {
     86                                 strTmp = strTmp.Replace("{" + dc.ColumnName + "}",dr[dc.ColumnName].ToString());
     87                             }
     88 
     89                             // 将替换过数据标签的字符串添加到需要返回的字符串中
     90                             html += strTmp;
     91                         }
     92                     }
     93                 }
     94                 else
     95                 {
     96                     html = "暂无数据!";
     97                 }
     98             }
     99             else
    100             {
    101                 html = "该控件没有配置Sql查询字符串!";
    102             }
    103 
    104             return html;
    105         }
    106     }
    View Code

    模板列表:

     1 <table cellpadding="0" cellspacing="1" style="200px; background:#666; color:#333;" >
     2     <tr>
     3         <td style="30px; color:#fff">ID</td>
     4         <td style="170px; color:#fff">Name</td>
     5     </tr>
     6     <!--Repeat{select * from Test}-->
     7     <tr style="line-height:26px; background:#fff;">
     8         <td>{Id}</td>
     9         <td><a href="StaticDetail_{Id}.htm" target="_blank">{Name}</a></td>
    10     </tr>
    11     <!--RepeatEnd-->
    12 </table>

    详细页面:

    1 <ul>
    2         <li>ID:{Id}</li>
    3         <li>Name:{Name}</li>
    4         <li>Content:{Content}</li>
    5     </ul>    

     调用:

      HtmlGengerate g = new HtmlGengerate();
      g.GengerateHtml();

  • 相关阅读:
    闭包的应用(转载)
    智能社讲解js基础
    HTML5 Geolocation
    Redis主从配置
    Redis序列化配置
    Ribbon负载均衡原理学习记录
    2059 mysql
    Cache缓存
    rabbitmq(三)-Direct交换器
    rabbitmq(二)原理
  • 原文地址:https://www.cnblogs.com/ziranquliu/p/4756063.html
Copyright © 2011-2022 走看看