zoukankan      html  css  js  c++  java
  • StringTemplate学习笔记(转载)

    这位大侠的教程非常详细

    http://www.cnblogs.com/lwme/category/243746.html

    ---------------------------------------------

    stringTemplate是一个模板引擎,同时支持java,C#,Python. 大家可以从http://www.stringtemplate.org/下载.
    StringTemplate 语法说明

    StringTemplate的语法是以$xxxx$来进行分割的. stringtemplate关键写是区分大小写的.

    属性引用
    名称属性
    在模板中,这个是最常用的一个属性.用于显示文字.如下:

    你的邮件地址:$email$

    替换属性名为email的值.

    同一个属性可以有多个值,多个值的语法如下
    $value;null="xxx",separator=", "$
    定义value属性,当value为null则显示xxx.如果有多个属性值则以,号分开

    字段引用
    如果一个属性名称是对象或集合.可以用 属性名称.字段名 访问字段值
    例如:
    你的姓名: $人.姓名$
    你的邮件:$人.邮件$

    使用语法: $对象名.字段名$
    在C#可以直接将一个对象设置到一个属性名称中.
    如:
    User us = new User();
    us.Name = "xxsssx";
    us.Value ="80";

    StringTemplate st = new StringTemplate("$User.Name$,$User.Value$");
    st.SetAttribute("User", us);

    Console.WriteLine(st.ToString());
    对于键/值对象,也同样使用上面方式进行访问如:
    StringTemplate a = new StringTemplate("$user.name$, $user.phone$");
    Hashtable user = new Hashtable();
    user.Add("name", "Terence");
    user.Add("phone", "none-of-your-business");
    a.SetAttribute("user", user);
    string results = a.ToString();


    自定义属性字段名
    格式: $属性名:{it.字段名}$
    例如:
    StringTemplate st = new StringTemplate("$abcdef:{第一个: $it.ddddd$ 第二个:$it.ddddd$}$");
    st.SetAttribute("abcdef.{ddddd,ddddd}","中国人", "我不来了");
    Console.WriteLine(st.ToString());

    如果字段名是保留字,可以使用$对象名.("保留字")$

    一次显示多个属性
    $[属性名,属性名]$


    模板引用
    必需把模板加入同一个模板组,才能相互之间调用模板.
    通过$模板名()$来调用模板
    模板传参数
    $模板名(参数名=参数值,参数名=参数值)$
    例如:
    StringTemplateGroup Group = new StringTemplateGroup("Temp");
    Group.DefineTemplate("link", "<a href='$url$'>$title$</a>");
    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());

    循环显示使用
    User us = new User();
    us.Name = "哈哈";
    us.Value = "99";
    List<User> uss = new List<User>();
    uss.Add(us);
    uss.Add(us);
    uss.Add(us);
    uss.Add(us);
    StringTemplate st = new StringTemplate("<table>$User:{<tr>$it.Name$<td></td>$it.Value$</tr>}$</table>");
    st.SetAttribute("User", uss);
    Console.WriteLine(st.ToString());

    通过模板交替显示
    StringTemplateGroup group = new StringTemplateGroup("Test");
    group.DefineTemplate("TrRed", "<tr class=red><td>$it.name$</td><td>$it.value$</td></tr>\n");
    group.DefineTemplate("TrWither", "<tr class=wither><td>$it.name$</td><td>$it.value$</td></tr>\n");

    StringTemplate st = new StringTemplate(group, "<table>$User:TrRed(),TrWither()$</table>");
    User us = new User();
    us.Name = "哈哈哈";
    us.Value = "999";
    List<User> uss = new List<User>();
    uss.Add(us);
    uss.Add(us);
    uss.Add(us);
    st.SetAttribute("User", uss);
    Console.WriteLine(st.ToString());

    例子教程下载:下载

    附:英文语法介绍

    Syntax

    Description

    <attribute>

    Evaluates to the value of attribute.ToString() if it exists else empty string.

    <i>, <i0>

    The iteration number indexed from one and from zero, respectively, when referenced within a template being applied to an attribute or attributes.

    <attribute.property>

    Looks for property of attribute as a property (C#), then accessor methods like getProperty() or isProperty(). If that fails, StringTemplate looks for a raw field of the attribute called property. Evaluates to the empty string if no such property is found.

    <attribute.(expr)>

    Indirect property lookup. Same as attribute.property except use the value of expr as the property_ name. Evaluates to the empty string if no such property is found.

    <multi-valued-attribute>

    Concatenation of ToString() invoked on each element. If multi-valued-attribute is missing his evaluates to the empty string.

    <multi-valued-attribute; separator=expr>

    Concatenation of ToString() invoked on each element separated by expr.

    <template(argument-list)>

    Include template. The argument-list is a list of attribute assignments where each assignment is of the form arg-of-template=expr where expr is evaluated in the context of the surrounding template
    not of the invoked template.

    <(expr)(argument-list)>

    Include template whose name is computed via expr. The argument-list is a list of attribute assignments where each assignment is of the form attribute=expr. Example $(whichFormat)()$ looks up whichFormat's value and uses that as template name. Can also apply an indirect template to an attribute.

    <attribute:template(argument-list)>

    Apply template to attribute. The optional argument-list is evaluated before application so that you can set attributes referenced within template. The default attribute it is set to the value of attribute. If attribute is multi-valued, then it is set to each element in turn and template is invoked n times where n is the number of values in attribute. Example: $name:bold() applies bold() to name's value.

    <attribute:(expr)(argument-list)>

    Apply a template, whose name is computed from expr, to each value of attribute. Example $data:(name)()$ looks up name's value and uses that as template name to apply to data.

    <attribute:t1(argument-list): ... :tN(argument-list)>

    Apply multiple templates in order from left to right. The result of a template application upon a multi-valued attribute is another multi-valued attribute. The overall expression evaluates to the concatenation of all elements of the final multi-valued attribute resulting from templateN's application.

    <attribute:{anonymous-template}>

    Apply an anonymous template to each element of attribute. The iterated it atribute is set automatically.

    <attribute:{argument-name_ | _anonymous-template}>

    Apply an anonymous template to each element of attribute. Set the argument-name to the iterated value and also set it.

    <a1,a2,...,aN:{argument-list_ | _anonymous-template}>

    Parallel list iteration. March through the values of the attributes a1..aN, setting the values to the arguments in argument-list in the same order. Apply the anonymous template. There is no defined it value unless inherited from an enclosing scope.

    <attribute:t1(),t2(),...,tN()>

    Apply an alternating list of templates to the elements of attribute. The template names may include argument lists.

    <if(attribute)>subtemplate
    <else>subtemplate2
    <endif>

    If attribute has a value or is a bool object that evaluates to true, include subtemplate else include subtemplate2. These conditionals may be nested.

    <if(!attribute)>subtemplate<endif>

    If attribute has no value or is a bool object that evaluates to false, include subtemplate. These conditionals may be nested.

    <first(attr)>

    The first or only element of attr. You can combine operations to say things like first(rest(names)) to get second element.

    <last(attr)>

    The last or only element of attr.

    <rest(attr)>

    All but the first element of attr. Returns nothing if $attr$ a single valued.

    <strip(attr)>

    Returns an iterator that skips any null values in $attr$. strip
    =x when x is a single-valued attribute.

    <length(attr)>

    Return an integer indicating how many elements in length $attr$ is. Single valued attributes return 1. Strings are not special; i.e., length("foo") is 1 meaning "1 attribute". Nulls are counted in lists so a list of 300 nulls is length 300. If you don't want to count nulls, use length(strip(list)).

    \$ or \<

    escaped delimiter prevents $ or < from starting an attribute expression and results in that single character.

    <\ >, <\n>, <\t>, <\r>

    special characters: space, newline, tab, carriage return.

    <! comment !>, $! comment !$

    Comments, ignored by StringTemplate

  • 相关阅读:
    Ubuntu 14.04 卸载通过源码安装的库
    Ubuntu 14.04 indigo 相关依赖
    Ubuntu 14.04 indigo 安装 cartographer 1.0.0
    Ubuntu 14.04 改变文件或者文件夹的拥有者
    安装cartographer遇到Unrecognized syntax identifier "proto3". This parser only recognizes "proto2"问题
    Unrecognized syntax identifier "proto3". This parser only recognizes "proto2". ”问题解决方法
    查看所有用户组,用户名
    1卸载ROS
    Ubuntu14.04 软件安装卸载
    Ubuntu14.04系统显示器不自动休眠修改
  • 原文地址:https://www.cnblogs.com/xinzhyu/p/1261763.html
Copyright © 2011-2022 走看看