+根据html页面模板动态生成html页面(c#类)+
一直以为动态生成静态页面不好做,昨天在网上找了下,我晕,其实很简单,思路大概是这样的,
1:建立一个html页面模板,在这个页面中把你想要动态显示的地方用特殊的字符串表示(如$htmlstrstr$);
2:在程序中用将这个html页面读到一个字符串变量如str;
3:用字符串的resplace方法将在第一步中特殊字符替换成你想要的内容;
4保存;
OK,so easy,今天就用C#写了一个这样的类,用来处理动态生成html页面的,自认为还写的完整,刚接触.NET不久,望指教,完整代码与示例在此下载:下载
一直以为动态生成静态页面不好做,昨天在网上找了下,我晕,其实很简单,思路大概是这样的,
1:建立一个html页面模板,在这个页面中把你想要动态显示的地方用特殊的字符串表示(如$htmlstrstr$);
2:在程序中用将这个html页面读到一个字符串变量如str;
3:用字符串的resplace方法将在第一步中特殊字符替换成你想要的内容;
4保存;
OK,so easy,今天就用C#写了一个这样的类,用来处理动态生成html页面的,自认为还写的完整,刚接触.NET不久,望指教,完整代码与示例在此下载:下载
转贴请注明出处,谢谢!
注:此类中的代码不全是原创,部份代码参照网友的代码!
以下是转换类的代码
1
using System;2
using System.Text;3
using System.Web;4
using System.Configuration;5
using System.IO;6
namespace solucky7


{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 AspxToHtml18

{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 TemplateParamCount64

{65
get66

{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
else83
this._templateParamCount=0;84
}85
}86
87

/**//// <summary>88
/// 模板文件所在的路径89
/// 90
/// </summary>91
public string TemplateFilePath92

{93

get
{ return this._templateFilePath;}94

set
{ this._templateFilePath=value;}95
}96

/**//// <summary>97
/// 转换后的html文件所存放的路径98
/// </summary>99
public string HtmlFilePath100

{101

get
{ return this._htmlFilePath;}102

set
{ this._htmlFilePath=value;}103
}104

105

/**//// <summary>106
/// html模板文件编码107
/// </summary>108
public Encoding TemplateHtmlCode109

{110

get
{ return this._templateHtmlCode;}111

set
{ this._templateHtmlCode=Encoding.GetEncoding(value.ToString());}112
}113

/**//// <summary>114
/// 编码115
/// </summary>116
public Encoding Code117

{118

get
{ return this._code;}119

set
{ this._code=Encoding.GetEncoding(value.ToString());}120
}121

/**//// <summary>122
/// 错误文件所在路径123
/// </summary>124
public string ErrLogPath125

{126

get
{127
if(!(this._errlogPath==null))128
return this._errlogPath;129
else130
return "aspxTohtml_log.txt";131
}132

set
{this._errlogPath=value;}133
}134

135
136
#endregion137
138

操作#region 操作139

140

/**//// <summary>141
/// 获取转换后的html文件所在相对文件路径142
/// 如:如果HtmlFilePath="/news/"143
/// 转换后的html文件名为200505050505.html144
/// 则返回的值为/news/200505050505.html145
/// </summary>146
/// <remarks>如果在未调用StartConvert方法之前调用此属性则返回null</remarks>147
public string HtmlFileVirtualPath148

{149
get150

{ 151
if(!(this._convertedFilename==""))152
return this.HtmlFilePath+this._convertedFilename;153
else154
return null;155
}156
}157

158

/**//// <summary>159
/// 为HTML页面参数数组付值160
/// </summary>161
/// <param name="param"></param>162
public void setTemplateFileparameter(string[] param)163

{164
try165

{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
try183

{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
try259

{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
finally270

{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
try294

{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
finally309

{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
try323

{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
#endregion338

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
#endregion377

378

#region379
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
#endregion398
}399
}400

浙公网安备 33010602011771号