ST的条件声明只有一个if语句,假如attribute为bool值,则直接计算,否则它通过判断attribute是否有值来计算。
接下来看几个例子:
例1,计算bool值:
StringTemplate st = new StringTemplate(@"
$if(c)$
条件成立
$else$
条件不成立
$endif$");
st.SetAttribute("c", false);
Console.WriteLine(st.ToString());
输出:条件不成立
例2,计算bool值:
StringTemplate st = new StringTemplate(@"
$if(c)$
条件成立
$else$
条件不成立
$endif$");
st.SetAttribute("c", true);
Console.WriteLine(st.ToString());
输出:条件成立
例3,判断是否有值:
StringTemplate st = new StringTemplate(@" $if(c)$ 条件成立 $else$ 条件不成立 $endif$");
Console.WriteLine(st.ToString());
输出:条件不成立
例4,判断是否有值:
StringTemplate st = new StringTemplate(@" $if(c)$ 条件成立 $else$ 条件不成立 $endif$");
st.SetAttribute("c", "test");
Console.WriteLine(st.ToString());
输出:条件成立
例5,多个分支:
StringTemplate st = new StringTemplate(@"
$if(a)$
条件a成立
$elseif(b)$
条件b成立
$elseif(c)$
条件c成立
$else$
条件都不成立
$endif$");
st.SetAttribute("c", "00");
Console.WriteLine(st.ToString());
输出:条件c成立
例6,多个分支设置了多个条件情况下,按照它们出现的顺序来确定条件是否成立:
StringTemplate st = new StringTemplate(@"
$if(a)$
条件a成立
$elseif(b)$
条件b成立
$elseif(c)$
条件c成立
$else$
条件都不成立
$endif$");
st.SetAttribute("c", true);
st.SetAttribute("b", true);
Console.WriteLine(st.ToString());
输出:条件b成立
例7,对attribute取反,这是ST唯一支持的运算符:
StringTemplate st = new StringTemplate(@"
$if(!c)$
条件成立
$else$
条件不成立
$endif$");
st.SetAttribute("c", true);
Console.WriteLine(st.ToString());
输出:条件不成立
例8,嵌套的if语句:
StringTemplate st = new StringTemplate(@"
$if(a)$
条件a成立
$if(b)$
条件b成立
$else$
条件b不成立
$endif$
$else$
条件不成立
$endif$");
st.SetAttribute("a", true);
Console.WriteLine(st.ToString());
输出:条件a成立 条件b不成立
支持的条件语法确实是太少了。
本文地址:http://www.cnblogs.com/lwme/archive/2010/04/30/1725329.html
参考:http://www.antlr.org/wiki/display/ST/Expressions#Expressions-Attributeoperators