StringTemplate无效字符'<'阅读XML模板时

时间:2012-05-02 13:20:58

标签: java html xml template-engine stringtemplate

我正在尝试创建一个简单的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。那么我做错了什么?

3 个答案:

答案 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