|
| 首页 → 程序开发 → .NET教程 |
| 阅读文章 |
Kingthy.Template模版引擎(讲一) -- 示例演示
版权说明: 此模版引擎组件你可以自由使用,也可以反编译,但必须保留我的个人程序集信息(AssemblyInfo).如果有任何意见或建议欢迎你来信MSN:kingthy$$gmail.com ($$改为@) 一,用途: 用于处理文本数据,比如XML数据文档,HTML页面文档等. 我设计此模版引擎的最终目的是为了在WEB项目中抛弃所有WEB服务器控件,直接处理最原始的HTML代码,方便不熟悉编程的美工设计修改HTML页面;而程序员也不用花费太多的时间在界面上:),因为已实现了程序代码与HTML代码的分离.而模版元素的定义都是标准的HTML标签代码 二,概念说明: 为方便说解,特定义以下名词: 模版引擎 : TemplateDocumentParser 实例 模版元素 : 模版引擎已定义的一些元素,如模版变量,模版条件变量,模版文档等.(后面的文章会详细介绍这些元素) 页面模版 : 已定义好模版元素的文本数据,如HTML页面代码. 设计人员 : 负责编写设计页面模版的人员,如设计HTML页面模版时的美工. 程序人员 : 负责编程处理设计人员已定义好的页面模版元素的人员.也即是程序开发人员. 三,例子演示: 假如有以下的页面数据: <html> <head> <title> 班级名单表 </title> </head> <body> <h1>班级名单表</h1> <table width="100%" border="1"> <tr> <td>序号</td> <td>姓名</td> <td>年龄</td> <td>出生日期</td> <td>性别</td> </tr> <tr> <td>01</td> <td>王二</td> <td>20</td> <td>1988年05月01日</td> <td>男</td> </tr> <tr> <td>02</td> <td>张丽</td> <td>18</td> <td>1990年09月21日</td> <td>女</td> </tr> <tr> <td>03</td> <td>李四</td> <td>35</td> <td>1973年12月21日</td> <td>男</td> </tr> </table> <div align="right">更新时间: 2008年01月01日</div> </body> </html> 其显示效果如下: 班级名单表 序号 姓名 年龄 出生日期 性别 1 王二 20 1988年05月01日 男 2 张丽 18 1990年09月21日 女 3 李四 35 1973年12月21日 男 更新时间: 2008年01月01日 14:00 现将其定义为页面模版,即将黄色背景与红色字体的都定义为模版元素,如下: <html> <head> <title> 班级名单表 </title> </head> <body> <h1>班级名单表</h1> <table width="100%" border="1"> <tr> <td>序号</td> <td>姓名</td> <td>年龄</td> <td>出生日期</td> <td>性别</td> </tr> <template name="ClassMember"> <tr> <td><$:RowNumber format="00"></td> <td><$:Name htmlEncode="true"></td> <td><$:Age></td> <td><$:Birthday format="yyyy年MM月dd日"></td> <td><$if:Sex value="1">男<$else value="2">女<$else>未知</$if></td> </tr> </template> </table> <div align="right">更新时间: <$:UpdateTime format="yyyy年MM月dd日 HH:mm"></div> </body> </html> 注意看页面模版与原来页面代码的区别: A): 原来页面代码中的三个"<tr></tr>"已合并为了一块模版文档(TemplateDocument),里面共分别定义了4个模版变量(TemplateVar)和1个模版条件变量(TemplateVarIf). B): 将原来页面代码中的红色字体定义为模版变量UpdateTime.并设置其format属性(数据格式化) 注:上面的模版变量分别都附加了相应的属性,format,HTMLEncode属性和模版条件变量里的value属性都是模版引擎能认识的属性:)在模版引擎里共定义了一些属性,后文会详细解析.这里暂时不表:) 当定义好页面模版后,我们将写相应的程序代码处理此页面模版.示例代码如下: //构造模版解析器并装载页面模版数据 TemplateDocumentParser parser = new TemplateDocumentParser(GetAbsFilePath("test.HTML"), Encoding.Default); //获取班级名单列表的模版文档 TemplateDocument document = parser.Document.Childs["ClassMember"]; //将班级名单列表绑定到模版文档 document.DataSource = GetClassMemberTable(); //设置绑定行事件,在每行数据绑定发生后调用此事件 document.BindRowAfter += delegate(object sender, TemplateBindRowAfterEventArgs e) { //设置当前绑定行的行码 //方法一: 简单设值 e.Document.Variables.SetValue("RowNumber", e.RowNumber); //方法二: 获取对象 //TemplateVar rowNumber = e.Document.Variables["RowNumber"]; //rowNumber.Value = e.RowNumber; }; document.DataBind(); //设置更新时间模版变量的值 TemplateVar var = parser.Document.Variables["UpdateTime"]; var.Value = DateTime.Now; //输出最终数据 parser.Document.Render(Console.Out); //或者将最终解析数据保存到文件 //parser.SaveToFile(GetAbsFilePath("test_result.HTML")); //Console.WriteLine("解析完成"); 注: 假如上面的页面模版保存在test.HTML文件,则构造模版引擎并载入页面模版.当模版引擎载入页面模版后将自动分析页面结构,因为在模版引擎的"世界"里每个元素数据都是生存于模版文档中的,所以刚载入的页面模版也是一个模版文档(parser.Document)也即是根级模版文档.页面模版中的模版文档(如例子中的ClassMember)即是其的子模版文档(类似于XML的节点关系) 下载详细的源代码: http://www.cnblogs.com/Files/kingthy/TemplateConsoleTestApp.rar
|
| 相关文章 |
| 发表评论 |