关注开源代码的实际应用
StringTemplate是一个模板引擎,Java、C#(.Net)、Python运行环境下都有相应的版本。网站: http://www.stringtemplate.org/。
模板语法:
1. 关键字:以$xxxx$来进行分割,并且区分大小写。
2. 属性引用:
1. 名称属性:在模板中,这是最常用的一个属性,用于显示文字。如:$email$经过模板引擎解析后将替换为变量email的值。同一个属性可以有多个值,多个值的语法如下:$value;null="xxx",separator=", "$ 定义value属性,当value为null则显示xxx,如果有多个属性值则以“,”号进行分隔(其中null和separator分别定义属性为空时的默认值和分隔符)。
2. 字段引用:
如果一个属性名称是对象或集合.可以用 属性名称.字段名 访问字段值
例如:
你的姓名: $人.姓名$
你的邮件:$人.邮件$
使用语法: $对象名.字段名$
在C#可以直接将一个对象设置到一个属性名称中.
如:
User us = new User();
us.Name = "xxsssx";
us.Value ="80";
StringTemplate st = new StringTemplate("$User.Name$,$User.Value{Article.Content}quot;);
st.SetAttribute("User", us);
Console.WriteLine(st.ToString());
对于键/值对象,也同样使用上面方式进行访问如:
StringTemplate a = new StringTemplate("$user.name$, $user.phone{Article.Content}quot;);
Hashtable user = new Hashtable();
user.Add("name", "Terence");
user.Add("phone", "none-of-your-business");
a.SetAttribute("user", user);
string results = a.ToString();
3. 自定义属性字段名:
格式: $属性名:{it.字段名}$
例如:
StringTemplate st = new StringTemplate("$abcdef:{第一个: $it.ddddd$ 第二个:$it.ddddd{Article.Content}#125;{Article.Content}quot;);
st.SetAttribute("abcdef.{ddddd,ddddd}","中国人", "我不来了");
Console.WriteLine(st.ToString());
如果字段名是保留字,可以使用$对象名.("保留字")$
一次显示多个属性
$[属性名,属性名]$
3. 模板引用:
必需把模板加入同一个模板组,才能相互之间调用模板.
通过$模板名()$来调用模板
模板传参数
$模板名(参数名=参数值,参数名=参数值)$
例如:
StringTemplateGroup Group = new StringTemplateGroup("Temp");
Group.DefineTemplate("link", "$title{Article.Content}quot;);
StringTemplate st = new StringTemplate(Group, "调用link模板,显示链接 $link(url=\"/faq/view?ID=\"+faqid, title=faqtitle)$ ,真的啊!");
st.SetAttribute("faqid", 1);
st.SetAttribute("title","中华人民共和国");
Console.WriteLine(st.ToString());
4. 循环显示使用:
User us = new User();
us.Name = "哈哈";
us.Value = "99";
List uss = new List();
uss.Add(us);
uss.Add(us);
uss.Add(us);
uss.Add(us);
StringTemplate st = new StringTemplate("$User:{$it.Name$it.Value{Article.Content}#125;$
");
st.SetAttribute("User", uss);
Console.WriteLine(st.ToString());
5. 通过模板交替显示:
StringTemplateGroup group = new StringTemplateGroup("Test");
group.DefineTemplate("TrRed", "$it.name$it.value$\n");
group.DefineTemplate("TrWither", "$it.name$it.value$\n");
StringTemplate st = new StringTemplate(group, "$User:TrRed(),TrWither()$
");
User us = new User();
us.Name = "哈哈哈";
us.Value = "999";
List uss = new List();
uss.Add(us);
uss.Add(us);
uss.Add(us);
st.SetAttribute("User", uss);
Console.WriteLine(st.ToString());