事件驱动自动生成静态页面模板解决方法(三)——文本内容替换

模板文本替换工具
本文介绍了一个用于文本模板替换的工具类,该工具可以根据预设的模板及替换元素组生成特定格式的文本,支持通用时间等变量的自动填充。

对文本按照模板内容进行替换的简单类封装

using System;
using System.Collections.Generic;
using System.Text;

namespace Xingmai.InformationProvider.Factory
{
    public class StringBuilder
    {
        private RespaceArrayList _ReplaceList = new RespaceArrayList();
        private TextCommonReplaceList _CommonReplaceList = new TextCommonReplaceList();
        private string _Template;

        /// <summary>
        /// 模板
        /// </summary>
        public string Template
        {
            get
            {
                return _Template;
            }
            set
            {
                _Template = value;
            }
        }       

        /// <summary>
        /// 替换元素组
        /// </summary>
        public RespaceArrayList ReplaceList
        {
            get
            {
                return _ReplaceList;
            }
            set
            {
                _ReplaceList = value;
            }
        }

        /// <summary>
        /// 通用替换组
        /// </summary>
        public TextCommonReplaceList CommonReplaceList
        {
            get
            {
                return _CommonReplaceList;
            }
        }

        public StringBuilder()
        {
        }

        /// <summary>
        /// 初始化并设定模板
        /// </summary>
        /// <param name="strTemplate"></param>
        public StringBuilder(string strTemplate)
        {
            Template = strTemplate;
        }

        /// <summary>
        /// 生成文本
        /// </summary>
        /// <returns></returns>
        public string WriteText()
        {
            return WriteText(true);
        }

        public string WriteText(bool isCommand)
        {
            string strContent = Template;
            foreach (ReplaceItem ri in ReplaceList.Array)
            {
                strContent = strContent.Replace(string.Format("{0}{1}{0}", ReplaceConfig.REPLACETAG, ri.Label), ri.Text);
            }

            if (isCommand)
                foreach (ReplaceItem ri in CommonReplaceList.Array)
                {
                    strContent = strContent.Replace(string.Format("{0}{1}{0}", ReplaceConfig.REPLACETAG, ri.Label), ri.Text);
                }

            return strContent;

        }
    }

    /// <summary>
    /// 通用替换组
    /// </summary>
    public class TextCommonReplaceList : RespaceArrayList
    {
        public TextCommonReplaceList()
            : base()
        {
            base.Add("D", DateTime.Now.Day.ToString());
            base.Add("M", DateTime.Now.Day.ToString());
            base.Add("Y", DateTime.Now.Year.ToString());

            base.Add("H", DateTime.Now.Hour.ToString());
            base.Add("F", DateTime.Now.Minute.ToString());
            base.Add("S", DateTime.Now.Second.ToString());
        }
    }

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


}

转载于:https://www.cnblogs.com/tishifu/archive/2007/09/13/892228.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值