tishifu

生成静态页面其实已经不是什么高深的技术了。我这里也只是简单封装了一下,方便调用。

【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;
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 = "^";
    }
}

分类:

技术点:

相关文章: