zoukankan      html  css  js  c++  java
  • StringTemplate学习笔记

    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

  • 相关阅读:
    IplImage, CvMat, Mat 的关系
    neon memory copy
    基于v4l2的webcam应用, 本地预监
    makefile写法实例
    Ubuntu 12.04 使用Eclipse搭建C/C++编译环境
    xapp1167与TRD14.4 关系
    v3学院带你一次性认清UART、RS-232、RS-422、RS-485的区别
    v3学院教你学习-task和function的异同
    寒假参加V3
    FPGA培训学习心得
  • 原文地址:https://www.cnblogs.com/lzppcc/p/807376.html
Copyright © 2011-2022 走看看