程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 根據html頁面模板動態生成html頁面(c#類)

根據html頁面模板動態生成html頁面(c#類)

編輯:關於C語言

一直以為動態生成靜態頁面不好做,昨天在網上找了下,我暈,其實很簡單,思路大概是這樣的,

1:建立一個Html(網頁制作培訓 Html教程 )頁面模板,在這個頁面中把你想要動態顯示的地方用特殊的字符串表示(如$Htmlstrstr$);

2:在程序中用將這個Html頁面讀到一個字符串變量如str;

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

4保存;

OK,so easy,今天就用C#(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 /**////

9 /// ASPxToHtml 的摘要說明。

10 /// 注:使用此類,你可以在web.config文件對模板類進行配置.如下

11 /**//*

12

13

14

15 */

16 /**////

17 public class ASPxToHtml

18 {

19 /**////

20 /// 模板文件中要替代的參數個數

21 ///

22 private int _templateParamCount=0;

23 /**////

24 /// 模板文件所在的路徑

25 ///

26 private string _templateFilePath =ConfigurationSettings.APPSettings["templateFilePath"];

27 /**////

28 /// 轉換後的Html文件所存放的路徑

29 ///

30 private string _htmlFilePath =ConfigurationSettings.APPSettings["HtmlFilePath"];

31

32 /**////

33 /// 模板頁頁面編碼

34 ///

35 private Encoding _templateHtmlCode =Encoding.GetEncoding("gb2312");

36

37 /**////

38 /// 轉換後的文件編碼

39 ///

40 private Encoding _code = Encoding.GetEncoding("gb2312");

41

42 /**////

43 /// 轉換後的Html文件名

44 ///

45 private string _convertedFilename="";

46 /**////

47 /// 模板文件中的參數

48 ///

49 private string[] _templateFileparameter ;

50

51 /**////

52 /// ASPx文件中的要代替Html文件中的參數實際值

53 ///

54 private string[] _ASPxFileparameter;

55

56 private string _errlogPath = ConfigurationSettings.APPSettings["ErrLogPath"];

57

58 屬性#region 屬性

59

60 /**////

61 /// 模板文件中要替代的參數個數

62 ///

63 public int TemplateParamCount

64 {

65 get

66 {

67 return this._templateParamCount;

68 }

69 set//分配參數個數時,同時為模板文件中的參數和ASPx文件中的要代替Html(網頁制作培訓 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 /**////

88 /// 模板文件所在的路徑

89 ///

90 ///

91 public string TemplateFilePath

92 {

93 get{ return this._templateFilePath;}

94 set{ this._templateFilePath=value;}

95 }

96 /**////

97 /// 轉換後的Html文件所存放的路徑

98 ///

99 public string HtmlFilePath

100 {

101 get{ return this._HtmlFilePath;}

102 set{ this._HtmlFilePath=value;}

103 }

104

105 /**////

106 /// Html模板文件編碼

107 ///

108 public Encoding TemplateHtmlCode

109 {

110 get{ return this._templateHtmlCode;}

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

112 }

113 /**////

114 /// 編碼

115 ///

116 public Encoding Code

117 {

118 get{ return this._code;}

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

120 }

121 /**////

122 /// 錯誤文件所在路徑

123 ///

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 /**////

141 /// 獲取轉換後的Html文件所在相對文件路徑

142 /// 如:如果HtmlFilePath="/news/"

143 /// 轉換後的html文件名為200505050505.Html

144 /// 則返回的值為/news/200505050505.Html

145 ///

146 /// 如果在未調用StartConvert方法之前調用此屬性則返回null

147 public string Html(網頁制作培訓 Html教程 )FileVirtualPath

148 {

149 get

150 {

151 if(!(this._convertedFilename==""))

152 return this.HtmlFilePath this._convertedFilename;

153 else

154 return null;

155 }

156 }

157

158 /**////

159 /// 為Html頁面參數數組付值

160 ///

161 ///

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 /**////

177 /// 為ASPx文件中將要替換Html文件中的參數數組付值

178 ///

179 ///

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 /**////

195 /// 開始進行ASPxToHtml轉換

196 ///

197 /// 返回值為成功創建後的文件名稱

198 /// 在調用此方法之前必需確定已調用setTemplateFileparameter 和setASPxFileparameter方法進行相應的付值操作

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 /**////

210 /// 開始進行ASPxToHtml轉換

211 ///

212 /// Html模板頁中的所有參數數組

213 /// ASPx頁面中要代替Html模板頁中參數值數組

214 /// 返回值為成功創建後的文件名稱

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 /**////

229 /// 用時間加隨機數生成一個文件名

230 ///

231 ///

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(網頁制作培訓 Html教程 )";

245 //return DateTime.Now.ToString("yyyyMMddHHmmss") ".Html";

246 }

247 /**////

248 /// 進行轉換處理

249 ///

250 /// 返回以時間命名的文件名

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

276 {

277 str =str.Replace(this._templateFileparameter[i],this._ASPxFileparameter[i]);

278 }

279

280 return savefile(str);

281 }

282

283 /**////

284 ///

285 ///

286 ///

287 ///

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.Html(網頁制作培訓 Html教程 )FilePath);

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 /**////

316 /// 傳入URL返回網頁的Html代碼

317 ///

318 /// URL

319 ///

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 /**////

355 /// 提供欲代替的參數個數

356 ///

357 ///

358 public ASPxToHtml(int templateParamCount)

359 {

360 settemplateParamCount(templateParamCount);

361

362 }

363 /**////

364 ///

365 ///

366 /// Html模板頁中的參數個數

367 /// 生成的Html文件所存放的文件夾路徑

368 /// Html(網頁制作培訓 Html教程 )模板頁路徑

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 /**////

381 /// 把錯誤寫入文件方法#region 把錯誤寫入文件方法

382 ///

383 ///

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved