掌握一种 C#/.Net 模板技术 — Velocity
前面写过一篇关于 Java 中使用 Velocity 模板的文章: 掌握一种Java模板技术 -- Velocity, 现在要考究一下 C# 中怎么使用相应的 nVelocity 模板。
当目光转移到了 C#/.Net 之后,但凡想要找个某个功能组件时都会联想到,曾经在 Java 中用过什么,.Net 中应该会有它相应的实现, 例如 Spring.Net, nHibernate, iTextSharp,还有这里的 nVelocity,特点就是组件名一般是 .Net 结尾或 n 字打头。
还是依照原来的例子,从 http://sourceforge.net/projects/nvelocity/files/ 下载 nVelocity 组件,当前版本是 NVelocity-0.4.2.8580。 下载后解压,在你的项目中引入 build 目录中的 NVelocity.dll,如果是 web 项目中用 nVelocity,可附加引入 NVelocity.Http.dll。
第一步:建立模板,模板语言的语法也基本一致的,如创建文件 HelloNVelocity.vm,把它放在 d:\tempalte\ 目录下, 内容为:
1## {单据责任人}:您的 {单据号} 号{单据类型}在 {操作日期} 日已支付<br/>
2${owner}:您的 ${bill} 号${type}在 ${date} 已支付第二步:加载模板,填充值,输出,HelloNVelocity.cs
1using System;
2using System.IO;
3using NVelocity;
4using NVelocity.App;
5using NVelocity.Runtime;
6
7public class HelloNVelocity
8{
9 public static void Main(string[] args)
10 {
11 VelocityEngine vltEngine = new VelocityEngine();
12 vltEngine.SetProperty(RuntimeConstants_Fields.RESOURCE_LOADER, "file");
13 vltEngine.SetProperty(RuntimeConstants_Fields.FILE_RESOURCE_LOADER_PATH, "d:/Template/");
14 vltEngine.Init();
15
16 Template vltTemplate = vltEngine.GetTemplate("HelloNVelocity.vm");
17
18 VelocityContext vltContext = new VelocityContext();
19
20 vltContext.Put("owner", "Unmi");
21 vltContext.Put("bill", "1000");
22 vltContext.Put("type", "报销单");
23 vltContext.Put("date", DateTime.Now.ToLongDateString());
24
25 StringWriter vltWriter = new StringWriter();
26 vltTemplate.Merge(vltContext, vltWriter);
27
28 Console.WriteLine(vltWriter.GetStringBuilder().ToString());
29
30 Console.Write("Press any key to continue . . . ");
31 Console.ReadKey(true);
32 }
33}执行后,控制台输出:
Unmi:您的 1000 号报销单在 2010年5月19日 已支付
代码逻辑与 Java 的 Velocity 组件的应用是完全一致的,加载模板->填充值->合并模板输出内容。
同时也要注意模板文件有中文的话要以 UTF-8 字符集保存,不然会出现乱码,需然默认的字符集仍然是 ISO8859-1。还应留意 Runtime.Resource.Loader Namespace 中,你可以从中体查出它支持哪些方式来加载模板文件:
1. FileResourceLoader 从文件系统加载模板文件
2. ResourceLocator 从文件系统或程序集中加载资源作为模板
3. DataSourceResourceLoader 从数据源中加载内容作为模板,奇怪的是这个类出现在源代码中,却未编译到 NVelocity.dll 中。
另外它的配置文件在 NVelocity.dll 的资源 Runtime\Defaults\nvelocity.properties 中。
NVelocity 使用了与 Velocity 保持一致的 VTL(Velocity Template Language) 语言,支持 #if、#foreach、#set、#include、#parse、#macro 等语法能处理你更复杂的数。
参考:
1. Net之NVelocity的三种用法
2. 封装ASP.NET模板引擎NVelocity应用实例
3. .NET模板引擎 NVelocity
其中有 NVelocity 的介绍和 VTL 语法说明
[版权声明]
本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。