利用ASP.NET动态生成HTML文件
Code
1利用ASP.Net动态生成HTML文件!
2环境:Microsoft.NETFrameworkSDKv2.0.50727
3OS:WindowsServer2003SP1中文版
4ASP.Net生成静态HTML页
5在.Net中涉及此类操作的是System.IO
6
7实现动态创建HTML文件的功能需要应用StreamReader和StreamWriter类。
8
9在ASP.net中,String对象是不可改变的,每次使用该类中的方法时,都要在内存中创建一个新的字符串对象,这就需要为新对象分配新的空间。在需要对字符串执行重复修改的情况下,就会增加系统开销。如果要修改字符串而不创建新的对象,则可以使用Sysmte.text命名空间下的StringBuilder类,该类可以改变字符串,当在一个循环中将许多字符串连接到一起时,使用StringBuildr类可以提高性能。
10
11实现方法:首先使用StreamReader对象读取指定HTML模板文件内容,并把读取到的内容保存到StringBuilder对象中,然后通过for循环语句依次替换关键字段,最后再通过StreamWriter对象根据替换后新内容创建一个HTML文件。
12
13代码如下:
14
15页面文件:
16
17新闻模板文件(template.html):
18
19 <html>
20 <head>
21 <title>$htmlkey[0]</title>
22 <metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
23 </head>
24 <body>
25 <table$htmlkey[1]height="100%"border="0"width="100%"cellpadding="10"cellspacing="0" bgcolor="#eeeeee"style="border:1pxsolid#000000">
26 <tr>
27 <tdwidth="100%"valign="middle"align="left">
28 <spanstyle="color:$htmlkey[2];font-size:$htmlkey[3]"><marquee>$htmlkey[4]</marquee></span>
29 </td>
30 </tr>
31 </table>
32 </body>
33</html>
34
35
36页面文件:Dhtml.aspx
37
38<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Dhtml.aspx.cs"Inherits="Dhtml"%>
39
40<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
41
42<htmlxmlns="http://www.w3.org/1999/xhtml">
43<headrunat="server">
44 <title>UntitledPage</title>
45</head>
46<body>
47 <formid="Form1"method="post"runat="server">
48 <asp:Buttonid="btnCreate"style="Z-INDEX:101;LEFT:576px;POSITION:absolute;TOP:48px"
49 runat="server"Text="创建HTML文件"OnClick="btnCreate_Click"></asp:Button>
50 <asp:TextBoxid="txtContent"style="Z-INDEX:102;LEFT:208px;POSITION:absolute;TOP:80px"
51 runat="server"TextMode="MultiLine"Height="402px"Width="352px"></asp:TextBox>
52 <asp:HyperLinkid="hyCreateFile"style="Z-INDEX:103;LEFT:584px;POSITION:absolute;TOP:96px"
53 runat="server"Target="_blank">创建的HTML文件</asp:HyperLink>
54 <asp:TextBoxid="txtTitle"style="Z-INDEX:104;LEFT:208px;POSITION:absolute;TOP:48px"runat="server"
55 Width="352px"></asp:TextBox>
56 <asp:Labelid="Label1"style="Z-INDEX:105;LEFT:128px;POSITION:absolute;TOP:48px"runat="server">页面标题</asp:Label>
57 <asp:Labelid="Label2"style="Z-INDEX:106;LEFT:128px;POSITION:absolute;TOP:80px"runat="server">页面内容</asp:Label>
58 </form>
59</body>
60</html>
61
62
63实现代码:Dhtml.aspx.cs
64
65usingSystem;
66usingSystem.Data;
67usingSystem.Configuration;
68usingSystem.Collections;
69usingSystem.Web;
70usingSystem.Web.Security;
71usingSystem.Web.UI;
72usingSystem.Web.UI.WebControls;
73usingSystem.Web.UI.WebControls.WebParts;
74usingSystem.Web.UI.HtmlControls;
75usingSystem.Text;
76usingSystem.IO;
77
78publicpartialclassDhtml:System.Web.UI.Page
79{
80 protectedvoidPage_Load(objectsender,EventArgse)
81 {
82
83 }
84 protectedvoidbtnCreate_Click(objectsender,EventArgse)
85 {
86 string[]newContent=newstring[5];//定义和html标记数目一致的数组
87 StringBuilderstrhtml=newStringBuilder();
88 try
89 {
90 //创建StreamReader对象
91 using(StreamReadersr=newStreamReader(Server.MapPath("TextBox")+"\\template.html"))
92 {
93 stringoneline;
94 //读取指定的HTML文件模板
95 while((oneline=sr.ReadLine())!=null)
96 {
97 strhtml.Append(oneline);
98 }
99 sr.Close();
100 }
101 }
102 catch(Exceptionerr)
103 {
104 //输出异常信息
105 Response.Write(err.ToString());
106 }
107 //为标记数组赋值
108 newContent[0]=txtTitle.Text;//标题
109 newContent[1]="BackColor='#cccfff'";//背景色
110 newContent[2]="#ff0000";//字体颜色
111 newContent[3]="100px";//字体大小
112 newContent[4]=txtContent.Text;//主要内容
113
114 //根据上面新的内容生成html文件
115 try
116 {
117 //指定要生成的HTML文件
118 stringfname=Server.MapPath("TextBox")+"\\"+DateTime.Now.ToString("yyyymmddhhmmss")+".html";
119 //替换html模版文件里的标记为新的内容
120 for(inti=0;i<5;i++)
121 {
122 strhtml.Replace("$htmlkey["+i+"]",newContent[i]);
123 }
124 //创建文件信息对象
125 FileInfofinfo=newFileInfo(fname);
126 //以打开或者写入的形式创建文件流
127 using(FileStreamfs=finfo.OpenWrite())
128 {
129 //根据上面创建的文件流创建写数据流
130 StreamWritersw=newStreamWriter(fs,System.Text.Encoding.GetEncoding("GB2312"));
131 //把新的内容写到创建的HTML页面中
132 sw.WriteLine(strhtml);
133 sw.Flush();
134 sw.Close();
135 }
136 //设置超级链接的属性
137 hyCreateFile.Text=DateTime.Now.ToString("yyyymmddhhmmss")+".html";
138 hyCreateFile.NavigateUrl="TextBox/"+DateTime.Now.ToString("yyyymmddhhmmss")+".html";
139 }
140 catch(Exceptionerr)
141 {
142 Response.Write(err.ToString());
143 }
144 }
145}
146
147vs2005.net+winserver2003sp1下调试通过
148
1利用ASP.Net动态生成HTML文件!
2环境:Microsoft.NETFrameworkSDKv2.0.50727
3OS:WindowsServer2003SP1中文版
4ASP.Net生成静态HTML页
5在.Net中涉及此类操作的是System.IO
6
7实现动态创建HTML文件的功能需要应用StreamReader和StreamWriter类。
8
9在ASP.net中,String对象是不可改变的,每次使用该类中的方法时,都要在内存中创建一个新的字符串对象,这就需要为新对象分配新的空间。在需要对字符串执行重复修改的情况下,就会增加系统开销。如果要修改字符串而不创建新的对象,则可以使用Sysmte.text命名空间下的StringBuilder类,该类可以改变字符串,当在一个循环中将许多字符串连接到一起时,使用StringBuildr类可以提高性能。
10
11实现方法:首先使用StreamReader对象读取指定HTML模板文件内容,并把读取到的内容保存到StringBuilder对象中,然后通过for循环语句依次替换关键字段,最后再通过StreamWriter对象根据替换后新内容创建一个HTML文件。
12
13代码如下:
14
15页面文件:
16
17新闻模板文件(template.html):
18
19 <html>
20 <head>
21 <title>$htmlkey[0]</title>
22 <metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
23 </head>
24 <body>
25 <table$htmlkey[1]height="100%"border="0"width="100%"cellpadding="10"cellspacing="0" bgcolor="#eeeeee"style="border:1pxsolid#000000">
26 <tr>
27 <tdwidth="100%"valign="middle"align="left">
28 <spanstyle="color:$htmlkey[2];font-size:$htmlkey[3]"><marquee>$htmlkey[4]</marquee></span>
29 </td>
30 </tr>
31 </table>
32 </body>
33</html>
34
35
36页面文件:Dhtml.aspx
37
38<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Dhtml.aspx.cs"Inherits="Dhtml"%>
39
40<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
41
42<htmlxmlns="http://www.w3.org/1999/xhtml">
43<headrunat="server">
44 <title>UntitledPage</title>
45</head>
46<body>
47 <formid="Form1"method="post"runat="server">
48 <asp:Buttonid="btnCreate"style="Z-INDEX:101;LEFT:576px;POSITION:absolute;TOP:48px"
49 runat="server"Text="创建HTML文件"OnClick="btnCreate_Click"></asp:Button>
50 <asp:TextBoxid="txtContent"style="Z-INDEX:102;LEFT:208px;POSITION:absolute;TOP:80px"
51 runat="server"TextMode="MultiLine"Height="402px"Width="352px"></asp:TextBox>
52 <asp:HyperLinkid="hyCreateFile"style="Z-INDEX:103;LEFT:584px;POSITION:absolute;TOP:96px"
53 runat="server"Target="_blank">创建的HTML文件</asp:HyperLink>
54 <asp:TextBoxid="txtTitle"style="Z-INDEX:104;LEFT:208px;POSITION:absolute;TOP:48px"runat="server"
55 Width="352px"></asp:TextBox>
56 <asp:Labelid="Label1"style="Z-INDEX:105;LEFT:128px;POSITION:absolute;TOP:48px"runat="server">页面标题</asp:Label>
57 <asp:Labelid="Label2"style="Z-INDEX:106;LEFT:128px;POSITION:absolute;TOP:80px"runat="server">页面内容</asp:Label>
58 </form>
59</body>
60</html>
61
62
63实现代码:Dhtml.aspx.cs
64
65usingSystem;
66usingSystem.Data;
67usingSystem.Configuration;
68usingSystem.Collections;
69usingSystem.Web;
70usingSystem.Web.Security;
71usingSystem.Web.UI;
72usingSystem.Web.UI.WebControls;
73usingSystem.Web.UI.WebControls.WebParts;
74usingSystem.Web.UI.HtmlControls;
75usingSystem.Text;
76usingSystem.IO;
77
78publicpartialclassDhtml:System.Web.UI.Page
79{
80 protectedvoidPage_Load(objectsender,EventArgse)
81 {
82
83 }
84 protectedvoidbtnCreate_Click(objectsender,EventArgse)
85 {
86 string[]newContent=newstring[5];//定义和html标记数目一致的数组
87 StringBuilderstrhtml=newStringBuilder();
88 try
89 {
90 //创建StreamReader对象
91 using(StreamReadersr=newStreamReader(Server.MapPath("TextBox")+"\\template.html"))
92 {
93 stringoneline;
94 //读取指定的HTML文件模板
95 while((oneline=sr.ReadLine())!=null)
96 {
97 strhtml.Append(oneline);
98 }
99 sr.Close();
100 }
101 }
102 catch(Exceptionerr)
103 {
104 //输出异常信息
105 Response.Write(err.ToString());
106 }
107 //为标记数组赋值
108 newContent[0]=txtTitle.Text;//标题
109 newContent[1]="BackColor='#cccfff'";//背景色
110 newContent[2]="#ff0000";//字体颜色
111 newContent[3]="100px";//字体大小
112 newContent[4]=txtContent.Text;//主要内容
113
114 //根据上面新的内容生成html文件
115 try
116 {
117 //指定要生成的HTML文件
118 stringfname=Server.MapPath("TextBox")+"\\"+DateTime.Now.ToString("yyyymmddhhmmss")+".html";
119 //替换html模版文件里的标记为新的内容
120 for(inti=0;i<5;i++)
121 {
122 strhtml.Replace("$htmlkey["+i+"]",newContent[i]);
123 }
124 //创建文件信息对象
125 FileInfofinfo=newFileInfo(fname);
126 //以打开或者写入的形式创建文件流
127 using(FileStreamfs=finfo.OpenWrite())
128 {
129 //根据上面创建的文件流创建写数据流
130 StreamWritersw=newStreamWriter(fs,System.Text.Encoding.GetEncoding("GB2312"));
131 //把新的内容写到创建的HTML页面中
132 sw.WriteLine(strhtml);
133 sw.Flush();
134 sw.Close();
135 }
136 //设置超级链接的属性
137 hyCreateFile.Text=DateTime.Now.ToString("yyyymmddhhmmss")+".html";
138 hyCreateFile.NavigateUrl="TextBox/"+DateTime.Now.ToString("yyyymmddhhmmss")+".html";
139 }
140 catch(Exceptionerr)
141 {
142 Response.Write(err.ToString());
143 }
144 }
145}
146
147vs2005.net+winserver2003sp1下调试通过
148
这里和大家分享和学习如何学IT!