• Asp.net采用替换模版页的形式生成静态页


    第一步:新建项目,创建一个简单模版页:TemplatePage.htm

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Porschev 生成静态页简单示例</title>   
    </head>
    <body>
    <h1>$Porschev[0]$</h1>
    <ul>
    <li>页标题:$Porschev[0]$</li>
    <li>名称:$Porschev[1]$</li>
    <li>网址:<a href="$Porschev[2]$" target="_blank">$Porschev[2]$</a></li>
    <li>时间:$Porschev[3]$</li>
    <li>详述:$Porschev[4]$</li>
    </ul>
    </body>
    </html>

    第二步:创建一个config文件:CreateHtml.config

    <?xml version="1.0" encoding="utf-8" ?>
    <web>
      <website key="0" value="title"/>
      <website key="1" value="name"/>
      <website key="2" value="url"/>
      <website key="3" value="createDate"/>
      <website key="4" value="desc"/>
    </web>

    第三步:编写生成静态页代码:(添加System.Web引用)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using System.Xml;
    namespace CreateHtmlBLL
    {
        public class CreateHtmlBLL
        {
            #region##读取配置文件某节点的个数
            ///<summary>
            /// 读取配置文件某节点的个数
            ///</summary>
            ///<param name="path">配置文件的路径</param>
            ///<param name="nodeName">要获取的节点</param>
            ///<returns>返回节点个数</returns>
            private int ReadConfig(string path,string nodeName)
            {
                string absoPath = string.Empty;  //绝对路径
                try
                {
                    absoPath = System.Web.HttpContext.Current.Server.MapPath(path);
                    XmlDocument xd = new XmlDocument();
                    xd.Load(absoPath);
                    XmlNodeList nodeList = xd.SelectNodes(nodeName);  //得到相应节点的集合
                    return nodeList.Count;
                }
                catch (Exception)
                {                
                    throw;
                }
            }
            #endregion
            #region##创建文件夹
            ///<summary>
            /// 创建文件夹
            ///</summary>
            ///<param name="path">要创建的路径</param>
            public void CreatFolder(string path)
            {
                string absoPath = string.Empty;  //绝对路径
                try
                {
                    absoPath = System.Web.HttpContext.Current.Server.MapPath(path);
                    if (!Directory.Exists(absoPath))
                    {
                        Directory.CreateDirectory(absoPath);
                    }
                }
                catch (Exception)
                {
                    
                    throw;
                }
            }
            #endregion
    
            #region##生成HTML页
            ///<summary>
            /// 生成HTML页
            ///</summary>
            ///<param name="configPath">配置文件的路径</param>
            ///<param name="configNodeName">配置文件节点名</param>
            ///<param name="temPath">模版页路径</param>
            ///<param name="arr">替换数组</param>
            ///<param name="createPath">生成HTML路径</param>
            public void CreateHtml(string configPath, String configNodeName, string temPath, string[] arr,string createPath)
            {          
                string fileName = string.Empty;         //生成文件名
                string absoCrePath = string.Empty;      //生成页绝对路径
                string absoTemPath = string.Empty;      //模版页的绝对中径
                int nodeCount = 0;                      //节点数
               
                try
                {
                    absoCrePath = System.Web.HttpContext.Current.Server.MapPath(createPath);
                    absoTemPath = System.Web.HttpContext.Current.Server.MapPath(temPath);
                    nodeCount = ReadConfig(configPath, configNodeName);
                    FileStream fs = File.Open(absoTemPath, FileMode.Open, FileAccess.Read);  //读取模版页
                    StreamReader sr = new StreamReader(fs, Encoding.GetEncoding("utf-8"));
                    StringBuilder sb = new StringBuilder(sr.ReadToEnd());
                    sr.Close();
                    sr.Dispose();
                    for (int i = 0; i < nodeCount; i++)
                    {
                        sb.Replace("$Porschev[" + i + "]$", arr[i]);
                    }
                    CreatFolder(createPath);
                    fileName = DateTime.Now.ToFileTime().ToString() + ".html";          //设置文件名(这里可以根据需要变化命名)
                    FileStream cfs = File.Create(absoCrePath + "/" + fileName);
                    StreamWriter sw = new StreamWriter(cfs, Encoding.GetEncoding("utf-8"));
                    sw.Write(sb.ToString());
                    sw.Flush();
                    sw.Close();
                    sw.Dispose();               
                }
                catch (Exception)
                {
                    
                    throw;
                }                       
            }
            #endregion
        }
    }

    第四步:测式生成

    protected void Page_Load(object sender, EventArgs e)
        {
            CreateHtml();
        }
        #region##生成静态页
        ///<summary>
        /// 生成静态页
        ///</summary>
        public void CreateHtml()
        {
            try
            {
                string[] arr = new string[5];
                arr[0] = "Porschev 静态页测式";
                arr[1] = "dtan";
                arr[2] = "www.dtan.so";
                arr[3] = DateTime.Today.ToString();
                arr[4] = "上班时间上CSDN,都是不好好工作的闲人。。。";
                CreateHtmlBLL.CreateHtmlBLL chb = new CreateHtmlBLL.CreateHtmlBLL();
                chb.CreateHtml("CreateHtml.config", "web/website","Template/TemplatePage.htm", arr,"Porschev");
            }
            catch (Exception ex)
            {            
                throw ex;
            }
        }
        #endregion
  • 相关阅读:
    (转载)博客园如何转载别人的文章
    python实现凯撒密码、凯撒加解密算法
    python新手学习可变和不可变对象
    Pycharm中配置远程Docker运行环境的教程图解
    python新手学习使用库
    python的help函数如何使用
    python编写softmax函数、交叉熵函数实例
    python能开发游戏吗
    python属于解释语言吗
    python的控制结构之For、While、If循环问题
  • 原文地址:https://www.cnblogs.com/smartsmile/p/6234328.html
Copyright © 2020-2023  润新知