我正在尝试创建一个简单的XML模板,到目前为止只包含:
<?xml version="1.0"?>
我读了这样的文件:
STGroup group = new STGroupDir("templates");
ST st = group.getInstanceOf("report");
st.add("analysis", ana);
String result = st.render();
System.out.println(result);
结果是几条错误消息:
report.st 1:1: invalid character '<'
report.st 1:1: invalid character '?'
report.st 1:19: invalid character '?'
report.st 1:20: invalid character '>'
report.st 1:2: no viable alternative at input 'xml'
我见过其他人阅读也使用标签的HTML tempaltes。那么我做错了什么?
答案 0 :(得分:4)
好吧,我似乎忽略了你需要在不同的snytax中指定模板。尽管从我使用的例子中可以看出这一点并不明显:
我的工作模板现在看起来不同了:
report (analysis) ::= <<
<?xml version="1.0"?>
>>
此外,我还更改了分界符:
STGroup group = new STGroupDir("templates",'$','$');
答案 1 :(得分:2)
我发现你也可以逃脱尖括号:
report(analysis) ::= <<
\<?xml version="1.0"?>
>>
请注意\
之前的<?xml
- 此外,它非常聪明,不需要在?>
结束时再次转义。
我相信Terrence Parr关于模型/视图分离的建议是,视图从未真正有机会操纵传递给模板的底层数据结构(或模型)。这是通过将模板“应用”到数据或集合来实现的,而不是通过数据在模板中循环。也许这是微妙的,也许实际上(在设计师的情况下)有点过于纯粹。
答案 2 :(得分:2)
或者,如果您不想使用组文件语法,则可以使用STRawGroupDir。此类与STGroupDir类似,但专门用于加载XML和HTML等文件。
http://www.stringtemplate.org/api/org/stringtemplate/v4/STRawGroupDir.html