分享
 
 
 

根据html页面模板动态生成html页面(c#类)

王朝c#·作者佚名  2008-05-30
窄屏简体版  字體: |||超大  

一直以为动态生成静态页面不好做,昨天在网上找了下,我晕,其实很简单,思路大概是这样的,

1:建立一个html页面模板,在这个页面中把你想要动态显示的地方用特殊的字符串表示(如$htmlstrstr$);

2:在程序中用将这个html页面读到一个字符串变量如str;

3:用字符串的resplace方法将在第一步中特殊字符替换成你想要的内容;

4保存;

OK,so easy,今天就用C#写了一个这样的类,用来处理动态生成html页面的,自认为还写的完整,刚接触.NET不久,望指教,完整代码与示例在此下载:下载http://www.cnblogs.com/Files/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

http://www.cnblogs.com/solucky/archive/2006/09/07/497188.html

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有