ASP.NET生成静态页面的方法
使用ASP.NET生成静态页面的方法有两种,第一种是使用C#在后台硬编码,第二种是读取模板文件,使用字符串替换的方法。第一种方法编码量大,而且维护比较困难。我重点讲解第二种方法。第二种方法的基本思路是:使用DW之类的工具生成一个静态页面模板。读取该模板文件,然后对里面的特殊标记使用真实的数据替换掉,并生成一个HTML文件
请看代码
1.C#
 1 using System;
using System;
2 using System.Collections.Generic;
using System.Collections.Generic;
3 using System.Text;
using System.Text;
4 using System.Xml;
using System.Xml;
5 using System.IO;
using System.IO;
6
7 namespace htmlWeb
namespace htmlWeb
8 {
{
9 public class CreateHtm
   public class CreateHtm
10 {
    {
11 
      
12
13 private string fileName;
       private string fileName;
14
15 public String FileName
       public String FileName
16 {
       {
17 get { return fileName; }
           get { return fileName; }
18 }
       }
19 /// <summary>
       /// <summary>
20 /// 读取配置文件
       /// 读取配置文件
21 /// </summary>
       /// </summary>
22 /// <param name="dirName">配置文件的路径名</param>
       /// <param name="dirName">配置文件的路径名</param>
23 /// <param name="tag">配置文件中的标签名</param>
       /// <param name="tag">配置文件中的标签名</param>
24 /// <returns>_replaceStr的长度</returns>
       /// <returns>_replaceStr的长度</returns>
25 private int GetConfig(String dirName, String tag)
       private int GetConfig(String dirName, String tag)
26 {
       {
27 XmlDataDocument config = new XmlDataDocument();
           XmlDataDocument config = new XmlDataDocument();
28 try
           try
29 {
           {
30 config.Load(dirName);
               config.Load(dirName);
31 }
           }
32 catch (Exception ex)
           catch (Exception ex)
33 {
           {
34 throw ex;
               throw ex;
35 }
           }
36 XmlNodeList list = config.GetElementsByTagName(tag);
           XmlNodeList list = config.GetElementsByTagName(tag);
37 return list.Count;
           return list.Count;
38 }
       }
39 /// <summary>
        /// <summary>
40 ///生成HTML文件
        ///生成HTML文件
41 /// </summary>
        /// </summary>
42 /// <param name="configFileName">配置文件的路径名</param>
        /// <param name="configFileName">配置文件的路径名</param>
43 /// <param name="configTag">配置文件中的标签名</param>
        /// <param name="configTag">配置文件中的标签名</param>
44 /// <param name="dir">生成文件所在的文件夹的路径</param>
        /// <param name="dir">生成文件所在的文件夹的路径</param>
45 /// <param name="templateFile">模板文件的的路径</param>
       /// <param name="templateFile">模板文件的的路径</param>
46 /// <param name="param">要替换的字符串数组</param>
        /// <param name="param">要替换的字符串数组</param>
47 /// <returns>生成的文件名</returns>
        /// <returns>生成的文件名</returns>
48 public void MakeHtml(String configFileName, String configTag, String dir, String templateFile, String[] param)
       public void MakeHtml(String configFileName, String configTag, String dir, String templateFile, String[] param)
49 {
       {
50 fileName = null;
           fileName = null;
51 int count = GetConfig(configFileName, configTag);
           int count = GetConfig(configFileName, configTag);
52 String[] _replaceStr = new String[count];
           String[] _replaceStr = new String[count];
53 try
           try
54 {
           {
55 FileStream tFile = File.Open(templateFile, FileMode.Open, FileAccess.Read);
               FileStream tFile = File.Open(templateFile, FileMode.Open, FileAccess.Read);
56 StreamReader reader = new StreamReader(tFile, Encoding.GetEncoding("gb2312"));
               StreamReader reader = new StreamReader(tFile, Encoding.GetEncoding("gb2312"));
57 StringBuilder sb = new StringBuilder(reader.ReadToEnd());
               StringBuilder sb = new StringBuilder(reader.ReadToEnd());
58 reader.Close();
               reader.Close();
59 for (int i = 0; i < count; i++)
               for (int i = 0; i < count; i++)
60 {
               {
61 sb.Replace("$repalce[" + i + "]$", param[i]);
                   sb.Replace("$repalce[" + i + "]$", param[i]);
62 }
               }
63
64 fileName = DateTime.Now.ToFileTime().ToString() + ".htm";
               fileName = DateTime.Now.ToFileTime().ToString() + ".htm";
65
66 FileStream rFile = File.Create(dir+"/" + fileName);
               FileStream rFile = File.Create(dir+"/" + fileName);
67 StreamWriter writer = new StreamWriter(rFile, Encoding.GetEncoding("gb2312"));
               StreamWriter writer = new StreamWriter(rFile, Encoding.GetEncoding("gb2312"));
68 writer.Write(sb.ToString());
               writer.Write(sb.ToString());
69 writer.Flush();
               writer.Flush();
70 writer.Close();
               writer.Close();
71 
               
72 
             
73
74
75 }
           }
76 catch (Exception ex)
           catch (Exception ex)
77 {
           {
78 throw ex;
               throw ex;
79 }
           }
80
81
82 }
       }
83
84 public void DeleteHtml(String dirName)
       public void DeleteHtml(String dirName)
85 {
       {
86 File.Delete(dirName);
           File.Delete(dirName);
87 }
       }
88 }
   }
89 }
}
90
 using System;
using System;2
 using System.Collections.Generic;
using System.Collections.Generic;3
 using System.Text;
using System.Text;4
 using System.Xml;
using System.Xml;5
 using System.IO;
using System.IO;6

7
 namespace htmlWeb
namespace htmlWeb8
 {
{9
 public class CreateHtm
   public class CreateHtm10
 {
    {11
 
      12

13
 private string fileName;
       private string fileName;14

15
 public String FileName
       public String FileName16
 {
       {17
 get { return fileName; }
           get { return fileName; }18
 }
       }19
 /// <summary>
       /// <summary>20
 /// 读取配置文件
       /// 读取配置文件21
 /// </summary>
       /// </summary>22
 /// <param name="dirName">配置文件的路径名</param>
       /// <param name="dirName">配置文件的路径名</param>23
 /// <param name="tag">配置文件中的标签名</param>
       /// <param name="tag">配置文件中的标签名</param>24
 /// <returns>_replaceStr的长度</returns>
       /// <returns>_replaceStr的长度</returns>25
 private int GetConfig(String dirName, String tag)
       private int GetConfig(String dirName, String tag)26
 {
       {27
 XmlDataDocument config = new XmlDataDocument();
           XmlDataDocument config = new XmlDataDocument();28
 try
           try29
 {
           {30
 config.Load(dirName);
               config.Load(dirName);31
 }
           }32
 catch (Exception ex)
           catch (Exception ex)33
 {
           {34
 throw ex;
               throw ex;35
 }
           }36
 XmlNodeList list = config.GetElementsByTagName(tag);
           XmlNodeList list = config.GetElementsByTagName(tag);37
 return list.Count;
           return list.Count;38
 }
       }39
 /// <summary>
        /// <summary>40
 ///生成HTML文件
        ///生成HTML文件41
 /// </summary>
        /// </summary>42
 /// <param name="configFileName">配置文件的路径名</param>
        /// <param name="configFileName">配置文件的路径名</param>43
 /// <param name="configTag">配置文件中的标签名</param>
        /// <param name="configTag">配置文件中的标签名</param>44
 /// <param name="dir">生成文件所在的文件夹的路径</param>
        /// <param name="dir">生成文件所在的文件夹的路径</param>45
 /// <param name="templateFile">模板文件的的路径</param>
       /// <param name="templateFile">模板文件的的路径</param>46
 /// <param name="param">要替换的字符串数组</param>
        /// <param name="param">要替换的字符串数组</param>47
 /// <returns>生成的文件名</returns>
        /// <returns>生成的文件名</returns>48
 public void MakeHtml(String configFileName, String configTag, String dir, String templateFile, String[] param)
       public void MakeHtml(String configFileName, String configTag, String dir, String templateFile, String[] param)49
 {
       {50
 fileName = null;
           fileName = null;51
 int count = GetConfig(configFileName, configTag);
           int count = GetConfig(configFileName, configTag);52
 String[] _replaceStr = new String[count];
           String[] _replaceStr = new String[count];53
 try
           try54
 {
           {55
 FileStream tFile = File.Open(templateFile, FileMode.Open, FileAccess.Read);
               FileStream tFile = File.Open(templateFile, FileMode.Open, FileAccess.Read);56
 StreamReader reader = new StreamReader(tFile, Encoding.GetEncoding("gb2312"));
               StreamReader reader = new StreamReader(tFile, Encoding.GetEncoding("gb2312"));57
 StringBuilder sb = new StringBuilder(reader.ReadToEnd());
               StringBuilder sb = new StringBuilder(reader.ReadToEnd());58
 reader.Close();
               reader.Close();59
 for (int i = 0; i < count; i++)
               for (int i = 0; i < count; i++)60
 {
               {61
 sb.Replace("$repalce[" + i + "]$", param[i]);
                   sb.Replace("$repalce[" + i + "]$", param[i]);62
 }
               }63

64
 fileName = DateTime.Now.ToFileTime().ToString() + ".htm";
               fileName = DateTime.Now.ToFileTime().ToString() + ".htm";65

66
 FileStream rFile = File.Create(dir+"/" + fileName);
               FileStream rFile = File.Create(dir+"/" + fileName);67
 StreamWriter writer = new StreamWriter(rFile, Encoding.GetEncoding("gb2312"));
               StreamWriter writer = new StreamWriter(rFile, Encoding.GetEncoding("gb2312"));68
 writer.Write(sb.ToString());
               writer.Write(sb.ToString());69
 writer.Flush();
               writer.Flush();70
 writer.Close();
               writer.Close();71
 
               72
 
             73

74

75
 }
           }76
 catch (Exception ex)
           catch (Exception ex)77
 {
           {78
 throw ex;
               throw ex;79
 }
           }80

81

82
 }
       }83

84
 public void DeleteHtml(String dirName)
       public void DeleteHtml(String dirName)85
 {
       {86
 File.Delete(dirName);
           File.Delete(dirName);87
 }
       }88
 }
   }89
 }
}90

private int GetConfig(String dirName, String tag) 此方法用于读取配置文件(见后),主要是获得要替换的字符串的个数,在本类同体现为一个字符串数组
public void MakeHtml(String configFileName, String configTag, String dir, String templateFile, String[] param) 此方法用于生成静态页面
51.52行创建一个字符数组,数组长度为配置文件中的节点个数。55-58行读取模板文件,并用读到的模板文件的HTML代码生成一个StringBuilder对象。59-62行使用StringBuilderd对象的repalce()方法替换标记“$repalce[i]$"为真实的数据
64行生成一个唯一的文件名(防止覆盖)66-70行把新的字符串写到文件中。这样就生成了一个静态文件了。
下面看一个使用的实例:
一个文章管理系统,利用这个类来生成静态页面。
首先,建立一个配置文件 config.xml.此文件告诉使用者每个标记的含义。如下
 1 <?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0" encoding="utf-8" ?>
2 <htmlWeb version="1">
<htmlWeb version="1">
3 <config>
  <config>
4 <article key="0" value="title"/>
    <article key="0" value="title"/>
5 <article key="1" value="author"/>
    <article key="1" value="author"/>
6 <article key="2" value="context"/>
    <article key="2" value="context"/>
7 <aritcle key="3" value="date"/>
    <aritcle key="3" value="date"/>
8 </config>
  </config>
9 </htmlWeb>
</htmlWeb> 
10
这样配置后,类会把标记数组0,1,2,3的位置分别替换为题目,作者,内容,发布日期。 <?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0" encoding="utf-8" ?>2
 <htmlWeb version="1">
<htmlWeb version="1">3
 <config>
  <config>4
 <article key="0" value="title"/>
    <article key="0" value="title"/>5
 <article key="1" value="author"/>
    <article key="1" value="author"/>6
 <article key="2" value="context"/>
    <article key="2" value="context"/>7
 <aritcle key="3" value="date"/>
    <aritcle key="3" value="date"/>8
 </config>
  </config>9
 </htmlWeb>
</htmlWeb> 10

看模板文件
 1 <head>
<head>
2 <title>模板文件</title>
<title>模板文件</title>
3 </head>
</head>
4 <body>
<body>
5 <h1>这是一个简单的HTML页,朋友们可以根据自己的需要重新设计</h1>
<h1>这是一个简单的HTML页,朋友们可以根据自己的需要重新设计</h1>
6 <li>标题:$replace[0]$</li>
<li>标题:$replace[0]$</li>
7 <li>作者:$replace[1]$</li>
<li>作者:$replace[1]$</li>
8 <li>内容:$repalce[2]$</li>
<li>内容:$repalce[2]$</li>
9 <li>时间:$repalce[3]$</li>
<li>时间:$repalce[3]$</li>
10 </body>
</body>
使用方法: <head>
<head>2
 <title>模板文件</title>
<title>模板文件</title>3
 </head>
</head>4
 <body>
<body>5
 <h1>这是一个简单的HTML页,朋友们可以根据自己的需要重新设计</h1>
<h1>这是一个简单的HTML页,朋友们可以根据自己的需要重新设计</h1>6
 <li>标题:$replace[0]$</li>
<li>标题:$replace[0]$</li>7
 <li>作者:$replace[1]$</li>
<li>作者:$replace[1]$</li>8
 <li>内容:$repalce[2]$</li>
<li>内容:$repalce[2]$</li>9
 <li>时间:$repalce[3]$</li>
<li>时间:$repalce[3]$</li>10
 </body>
</body> 1 using System;
using System;
2 using System.Data;
using System.Data;
3 using System.Configuration;
using System.Configuration;
4 using System.Web;
using System.Web;
5 using System.Web.Security;
using System.Web.Security;
6 using System.Web.UI;
using System.Web.UI;
7 using System.Web.UI.WebControls;
using System.Web.UI.WebControls;
8 using System.Web.UI.WebControls.WebParts;
using System.Web.UI.WebControls.WebParts;
9 using System.Web.UI.HtmlControls;
using System.Web.UI.HtmlControls;
10
11 namespace UseT
namespace UseT
12 {
{
13 public class Test{
    public class Test{
14 
    
15 public void main(){
     public void main(){     
16 string[] param = new string[4];
     string[] param = new string[4];
17 param[0] = "测试模板";
     param[0] = "测试模板";
18 param[1] = "农佳捷";
     param[1] = "农佳捷";
19 param[2] = "这是一个测试文章";
     param[2] = "这是一个测试文章";
20 param[3] = "2007-10-30";
     param[3] = "2007-10-30";
21 
     
22 htmlWeb.CreateHtm cs = new htmlWeb.CreateHtm();
     htmlWeb.CreateHtm cs = new htmlWeb.CreateHtm();
23 cs.MakeHtml("配置文件的路径
     cs.MakeHtml("配置文件的路径
24 “, ”article“, ”生成文件的路径“, "模板文件的路径", param)
“, ”article“, ”生成文件的路径“, "模板文件的路径", param)
25 
     
26 }
    }
27 }
    }
28 }
}
29
朋友们只要把相应的参数修改为实际的值,就生成静态文件了。 using System;
using System;2
 using System.Data;
using System.Data;3
 using System.Configuration;
using System.Configuration;4
 using System.Web;
using System.Web;5
 using System.Web.Security;
using System.Web.Security;6
 using System.Web.UI;
using System.Web.UI;7
 using System.Web.UI.WebControls;
using System.Web.UI.WebControls;8
 using System.Web.UI.WebControls.WebParts;
using System.Web.UI.WebControls.WebParts;9
 using System.Web.UI.HtmlControls;
using System.Web.UI.HtmlControls;10

11
 namespace UseT
namespace UseT12
 {
{13
 public class Test{
    public class Test{14
 
    15
 public void main(){
     public void main(){     16
 string[] param = new string[4];
     string[] param = new string[4];17
 param[0] = "测试模板";
     param[0] = "测试模板";18
 param[1] = "农佳捷";
     param[1] = "农佳捷";19
 param[2] = "这是一个测试文章";
     param[2] = "这是一个测试文章";20
 param[3] = "2007-10-30";
     param[3] = "2007-10-30";21
 
     22
 htmlWeb.CreateHtm cs = new htmlWeb.CreateHtm();
     htmlWeb.CreateHtm cs = new htmlWeb.CreateHtm();23
 cs.MakeHtml("配置文件的路径
     cs.MakeHtml("配置文件的路径24
 “, ”article“, ”生成文件的路径“, "模板文件的路径", param)
“, ”article“, ”生成文件的路径“, "模板文件的路径", param)25
 
     26
 }
    }27
 }
    }28
 }
}29

 
                     
                    
                 
                    
                 
 
        

 
     
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号