【原创】推荐一个模板引擎 - templateengine
2008-07-07 21:31
357 查看
一直都在使用StringTemplate模板引擎,虽然使用方便,但是功能实在太弱太弱,准备放弃使用StringTemplate。刚好碰巧发现了另外一个开源的模板引擎,就是今天要介绍的TemplateEngine 2,功能非常强大。
先看看他的语法吧
Thank You for your order #order.billFirstName# #order.billLastName#.
<br>
Your Order Total is: #format(order.total, "C")#
<br>
<ad:if test="#order.shipcountry isnot "US"#">
Your order will arrive in 2-3 weeks
<ad:else>
Your order will arrive in 5-7 days
</ad:if>
TemplateEngine2.0 主要功能
Template Engine主要是两个类在使用:Template 和TemplateManager,Template 是一个基本模板, TemplateManager是扩展的模板
用Template或TemplateManager 是非常容易创建模板的
Template template = Template.FromString(string name, string data)
Template template = Template.FromFile(string name, string filename)
用TemplateManager
TemplateManager mngr = new TemplateManager(Template template);
或者
TemplateManager mngr = TemplateManager.FromFile(string filename);
TemplateManager mngr = TemplateManager.FromString(string template);
当调用FromString 方法时,string是模板的代码。这个方法能动态的加载文本到template中。FormFile是指调用的模板文件。
TemplateManager有个属性SetValue可以用来设置模板的变量和变量的内容
mngr.SetValue("xx", "xxxxxxxxxxxxxx");
输出模板
Response.Write(mngr.Process());
这一切都非常的简单。
函数列表
equals(obj1.obj2) 比较两个变量是否一样,返回bool型
notequals(obj1,obj2)比较两个变量是否不一样,返回 bool型 也可以 not(equals(obj1,obj2))
iseven(num) 测试是否是偶数
isodd(num)测试是否奇数
isempty(string) 测试字符串是否为0
isnotempty(string) 测试字符串是否大于0
isnumber(num) 测试是否为整型
toupper(string) 转化成大写
tolower(string) 转化成小写
isdefined(varname) 测试变量是否有定义
ifdefined(varname, value) 返回 value 如果varname 是有定义的,
特别有用:#ifdefined("name", name)# 将输出value 如果varname没有定义,其它情况不输出
len(string)返回字符串长度
tolist(collection, property, delim) 简单的输出列表
例1:
ArrayList list = new ArrayList();
list.Add("one");
list.Add("two");
list.Add("three");
template.SetValue("mylist", list);
你的模板内容:
#toList(mylist, " & ")#
输出:one & two & three
例2:
list.Add(new Customer("Tom", "Whatever"));
list.Add(new Customer("Henry", "III"));
list.Add(new Customer("Tom", "Jackson"));
template.SetValue("mylist", list);
模板内容:
#toList(mylist, "firstName", ",")#
输出:Tom,Henry,Tom
[b][b]函数列表
[/b]
snull(obj)[/b] 测试是否为空
not(boolvalue) 返回not(!)的bool型
iif(booleanExpression, iftruevalue, iffalsevalue) 如果booleanExpression为真,输出iftruevalue,否则输出iffalsevalue
format(object, formatstring)格式化字符串,相当于ToString(formatstring)
例子:
#format(total, "C")#
will output: $1,208.45
[b]函数列表
trim(string)[/b] 去除前后空格
filter(collection, booleanproperty) 返回一个新的组所有符合booleanproperty要求的
gt(obj1,obj2) 如果 obj1 > obj2 返回为真,否则为false
lt(obj1,obj2) 如果 obj1 < obj2 返回为真,否则为false
compare(obj1, obj2) 如果 obj1<obj2 返回-1 obj1=obj2 返回0 如果obj1>obj2 返回1
or(bool1,bool2) 有一个为真返回就是true
and(bool1, bool2) 两个都为真时返回true
comparenocase(string1, string2) 相等时返回为true 否则为false
stripnewlines(string) 返回 所有\r\n 用space 代替的字符串
typeof(object) 返回object 类型,如typeof("abcd234") 返回 "string" typeof(3) 返回 int
cint(value) 返回整数 等同于Convert.toInt32()
cdouble(value) 返回双精度
cdate(value) 返回一个datetime 型
createtypereference(type) 引用一个静态的类型,但格式必须是<ad:set tag
例:
#createtypereference("System.Math").Round(3.39789)#
#createtypereference("System.Math").PI#
or
<ad:set name="MyMath" value="#createtypereference("System.Math")#" />
#MyMath.Round(3.3)#
#MyMath.PI#
还支持c#内置的一些方法,如还可以这样使用
#xx.Length#
还有很多你意想不到的效果,赶紧来试用吧。
官方地址:http://www.adersoftware.com/index.cfm?page=templateEngine2
先看看他的语法吧
Thank You for your order #order.billFirstName# #order.billLastName#.
<br>
Your Order Total is: #format(order.total, "C")#
<br>
<ad:if test="#order.shipcountry isnot "US"#">
Your order will arrive in 2-3 weeks
<ad:else>
Your order will arrive in 5-7 days
</ad:if>
TemplateEngine2.0 主要功能
Template Engine主要是两个类在使用:Template 和TemplateManager,Template 是一个基本模板, TemplateManager是扩展的模板
用Template或TemplateManager 是非常容易创建模板的
Template template = Template.FromString(string name, string data)
Template template = Template.FromFile(string name, string filename)
用TemplateManager
TemplateManager mngr = new TemplateManager(Template template);
或者
TemplateManager mngr = TemplateManager.FromFile(string filename);
TemplateManager mngr = TemplateManager.FromString(string template);
当调用FromString 方法时,string是模板的代码。这个方法能动态的加载文本到template中。FormFile是指调用的模板文件。
TemplateManager有个属性SetValue可以用来设置模板的变量和变量的内容
mngr.SetValue("xx", "xxxxxxxxxxxxxx");
输出模板
Response.Write(mngr.Process());
这一切都非常的简单。
函数列表
equals(obj1.obj2) 比较两个变量是否一样,返回bool型
notequals(obj1,obj2)比较两个变量是否不一样,返回 bool型 也可以 not(equals(obj1,obj2))
iseven(num) 测试是否是偶数
isodd(num)测试是否奇数
isempty(string) 测试字符串是否为0
isnotempty(string) 测试字符串是否大于0
isnumber(num) 测试是否为整型
toupper(string) 转化成大写
tolower(string) 转化成小写
isdefined(varname) 测试变量是否有定义
ifdefined(varname, value) 返回 value 如果varname 是有定义的,
特别有用:#ifdefined("name", name)# 将输出value 如果varname没有定义,其它情况不输出
len(string)返回字符串长度
tolist(collection, property, delim) 简单的输出列表
例1:
ArrayList list = new ArrayList();
list.Add("one");
list.Add("two");
list.Add("three");
template.SetValue("mylist", list);
你的模板内容:
#toList(mylist, " & ")#
输出:one & two & three
例2:
list.Add(new Customer("Tom", "Whatever"));
list.Add(new Customer("Henry", "III"));
list.Add(new Customer("Tom", "Jackson"));
template.SetValue("mylist", list);
模板内容:
#toList(mylist, "firstName", ",")#
输出:Tom,Henry,Tom
[b][b]函数列表
[/b]
snull(obj)[/b] 测试是否为空
not(boolvalue) 返回not(!)的bool型
iif(booleanExpression, iftruevalue, iffalsevalue) 如果booleanExpression为真,输出iftruevalue,否则输出iffalsevalue
format(object, formatstring)格式化字符串,相当于ToString(formatstring)
例子:
#format(total, "C")#
will output: $1,208.45
[b]函数列表
trim(string)[/b] 去除前后空格
filter(collection, booleanproperty) 返回一个新的组所有符合booleanproperty要求的
gt(obj1,obj2) 如果 obj1 > obj2 返回为真,否则为false
lt(obj1,obj2) 如果 obj1 < obj2 返回为真,否则为false
compare(obj1, obj2) 如果 obj1<obj2 返回-1 obj1=obj2 返回0 如果obj1>obj2 返回1
or(bool1,bool2) 有一个为真返回就是true
and(bool1, bool2) 两个都为真时返回true
comparenocase(string1, string2) 相等时返回为true 否则为false
stripnewlines(string) 返回 所有\r\n 用space 代替的字符串
typeof(object) 返回object 类型,如typeof("abcd234") 返回 "string" typeof(3) 返回 int
cint(value) 返回整数 等同于Convert.toInt32()
cdouble(value) 返回双精度
cdate(value) 返回一个datetime 型
createtypereference(type) 引用一个静态的类型,但格式必须是<ad:set tag
例:
#createtypereference("System.Math").Round(3.39789)#
#createtypereference("System.Math").PI#
or
<ad:set name="MyMath" value="#createtypereference("System.Math")#" />
#MyMath.Round(3.3)#
#MyMath.PI#
还支持c#内置的一些方法,如还可以这样使用
#xx.Length#
还有很多你意想不到的效果,赶紧来试用吧。
官方地址:http://www.adersoftware.com/index.cfm?page=templateEngine2
相关文章推荐
- 推荐一个模板引擎 - templateengine
- 推荐一个模板引擎 - templateengine
- nVelocity -.NET的模板引擎(template engine) --转载
- 如何选择Javascript模板引擎(javascript template engine)?
- 500 Lines or Less: A Template Engine(模板引擎)
- 如何选择Javascript模板引擎(javascript template engine)?
- 如何选择Javascript模板引擎(javascript template engine)?
- org.tinygroup.templateengine-模板引擎
- Beyond The Template Engine超越模板引擎
- x-template:一个简单高效的字符串模板引擎
- JavaScript templating engine(一个好的JS模板引擎)
- node template engine节点模板引擎
- Velocity基于java的模板引擎(template engine)
- 如何选择Javascript模板引擎(javascript template engine)?
- x-template:一个简单高效的字符串模板引擎
- 使用tornado模板引擎配合yaml构建nginx配置接口 [扩展saltstack] 推荐
- 推荐一个免费提供div+css网站模板的站点
- iOS 模版引擎 MGTemplateEngine
- 一个基于velocity模板引擎的代码生成器
- VTemplate模板引擎的使用--高级篇