生成静态页面其实已经不是什么高深的技术了。我这里也只是简单封装了一下,方便调用。
【2007年9月13日更新代码,修正一些小问题】
调用代码示例
HtmlBuilder builder = new HtmlBuilder(HtmlCollection.GetTemplateByKey("Account"));
builder.ReplaceList.Add("Titel", "ceshi");
builder.FileTo = Server.MapPath("~/NewsPage");
builder.FileCode = "dd";
builder.FileExtension = "html";
HyperLink link = new HyperLink();
link.Text = "dddd";
link.NavigateUrl = "~/NewsPage/" + builder.WriteHtml();
this.Controls.Add(link);
cs ----------------------------------------------------------------------------------------------
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Collections;
namespace Tirsun.WebSite.InformationProvider.Factory
{
public class HtmlBuilder
{
private RespaceArrayList _ReplaceList = new RespaceArrayList();
private string _Template;
private string _FileTo;
private string _FileCode;
private string _FileExtension;
/// <summary>
/// 模板
/// </summary>
public string Template
{
get
{
return _Template;
}
set
{
_Template = value;
}
}
/// <summary>
/// 将要写入的根文件夹
/// </summary>
public string FileTo
{
get
{
return _FileTo;
}
set
{
_FileTo = value;
}
}
/// <summary>
/// 文件名伴随码,如果为空则不伴随
/// </summary>
public string FileCode
{
get
{
if (_FileCode == null)
_FileCode = "";
return _FileCode;
}
set
{
_FileCode = value;
}
}
/// <summary>
/// 设置文件后缀名,默认为aspx
/// </summary>
public string FileExtension
{
get
{
if (_FileExtension == null)
_FileExtension = "aspx";
return _FileExtension;
}
set
{
_FileExtension = value;
}
}
/// <summary>
/// 替换元素组
/// </summary>
public RespaceArrayList ReplaceList
{
get
{
return _ReplaceList;
}
set
{
_ReplaceList = value;
}
}
public HtmlBuilder()
{
}
/// <summary>
/// 初始化并设定模板
/// </summary>
/// <param name="strTemplate"></param>
public HtmlBuilder(string strTemplate)
{
Template = strTemplate;
}
/// <summary>
/// 生成Html文件
/// </summary>
/// <param name="FileName">文件名,如果有同文件则覆盖</param>
/// <returns></returns>
public void WriteHtml(string FileName)
{
string strContent = Template;
foreach (ReplaceItem ri in ReplaceList.Array)
{
strContent = strContent.Replace(string.Format("{0}{1}{2}", ReplaceConfig.REPLACETAG, ri.Label, ReplaceConfig.REPLACETAG), ri.Text);
}
StreamWriter sw = new StreamWriter(FileName, false, Encoding.UTF8);
sw.Write(strContent);
sw.Flush();
sw.Close();
}
/// <summary>
/// 生成Html文件(不生成同名文件)
/// </summary>
/// <returns></returns>
public string WriteHtml()
{
string DirYear = DateTime.Now.Year.ToString();
string DirMonth = DateTime.Now.Month.ToString();
string DirDay = DateTime.Now.Day.ToString();
string FileName = DateTime.Now.ToLongTimeString().Replace(":", "");
if (!Directory.Exists(string.Format("{0}\\{1}\\{2}\\{3}", FileTo, DirYear, DirMonth, DirDay)))
Directory.CreateDirectory(string.Format("{0}\\{1}\\{2}\\{3}", FileTo, DirYear, DirMonth, DirDay));
string strContent = Template;
foreach (ReplaceItem ri in ReplaceList.Array)
{
strContent = strContent.Replace(string.Format("{0}{1}{0}", ReplaceConfig.REPLACETAG, ri.Label), ri.Text);
}
string strFileName = string.Format("{0}\\{1}\\{2}\\{3}\\{4}{5}.{6}", FileTo, DirYear, DirMonth, DirDay, FileName, FileCode, FileExtension);
//保证文件不被复写
bool Has = true;
while (Has)
{
if (File.Exists(strFileName))
{
strFileName = string.Format("{0}\\{1}\\{2}\\{3}\\{4}{5}{6}.{7}", FileTo, DirYear, DirMonth, DirDay, FileName, DateTime.Now.Millisecond, FileCode, FileExtension);
}
else
{
Has = false;
}
}
StreamWriter sw = new StreamWriter(strFileName, false, Encoding.UTF8);
sw.Write(strContent);
sw.Flush();
sw.Close();
return strFileName.Replace(FileTo, "").Replace("\\", "/");
}
}
/// <summary>
/// 替换元素组
/// </summary>
public class RespaceArrayList
{
private List<ReplaceItem> _List = new List<ReplaceItem>();
/// <summary>
/// 添加替换元素
/// </summary>
/// <param name="item"></param>
/// <returns></returns>
public void Add(ReplaceItem item)
{
_List.Add(item);
}
/// <summary>
/// 添加替换元素
/// </summary>
/// <param name="strLabel">替换元素标签</param>
/// <param name="strText">替换元素内容</param>
/// <returns></returns>
public void Add(string strLabel, string strText)
{
_List.Add(new ReplaceItem(strLabel, strText));
}
/// <summary>
/// 移除替换元素组
/// </summary>
/// <param name="item"></param>
public void Remove(ReplaceItem item)
{
_List.Remove(item);
}
/// <summary>
/// 删除指定元素的替换元素
/// </summary>
/// <param name="index"></param>
public void RemoveAt(int index)
{
_List.RemoveAt(index);
}
/// <summary>
/// 替换元素索引
/// </summary>
/// <param name="i"></param>
/// <returns></returns>
public ReplaceItem this[int i]
{
get
{
return _List[i];
}
set
{
_List[i] = value;
}
}
/// <summary>
/// 返回替换元素数组
/// </summary>
public ReplaceItem[] Array
{
get
{
return _List.ToArray();
}
}
}
/// <summary>
/// 替换元素
/// </summary>
public class ReplaceItem
{
private string _Label;
private string _Text;
public ReplaceItem()
{
}
/// <summary>
/// 替换元素定义
/// </summary>
/// <param name="strLabel">替换元素标签</param>
/// <param name="strText">替换元素内容</param>
public ReplaceItem(string strLabel, string strText)
{
Label = strLabel;
Text = strText;
}
/// <summary>
/// 需要替换的标签
/// </summary>
public string Label
{
get
{
return _Label;
}
set
{
_Label = value;
}
}
/// <summary>
/// 替换成的内容
/// </summary>
public string Text
{
get
{
return _Text;
}
set
{
_Text = value;
}
}
}
/// <summary>
/// 替换配置
/// </summary>
public class ReplaceConfig
{
/// <summary>
/// 标签标识符
/// </summary>
public const string REPLACETAG = "^";
}
}