阅读文章

Kingthy.Template模版引擎(讲一) -- 示例演示

[日期:2008-03-17] 来源:  作者: [字体: ]

    
  版权说明: 此模版引擎组件你可以自由使用,也可以反编译,但必须保留我的个人程序集信息(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
  
  
    


阅读:
录入:blue1000

评论 】 【 推荐 】 【 打印
上一篇:在特定情况下的简单SSO实现方案
下一篇:手机——未来的服务接入点
相关文章      
本文评论
发表评论


点评: 字数
姓名:

  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款