9

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

4

3 回答 3

6

好的,我似乎忽略了您需要在不同的语法中指定模板。尽管这在我使用的示例中并不明显:

我的工作模板现在看起来不同了:

report (analysis) ::= <<
<?xml version="1.0"?>
>>

此外,我还更改了分隔符:

STGroup group = new STGroupDir("templates",'$','$');
于 2012-05-02T16:08:45.373 回答
2

我发现您也可以转义尖括号:

report(analysis) ::= <<
\<?xml version="1.0"?>
>>

注意--\前面的右边,<?xml另外它足够聪明,不需要在右?>括号处再次转义。

而且我相信 Terrence Parr 关于模型/视图分离的建议是,视图永远没有机会操纵传递给模板的底层数据结构(或模型)。这是通过将模板“应用”到数据或集合来完成的,而不是在模板中循环遍历数据。也许这是微妙的,也许实际上(在设计师的情况下)有点太纯粹了。

于 2013-02-21T05:16:39.240 回答
2

或者,如果您不想使用组文件语法,可以使用 STRawGroupDir。此类类似于 STGroupDir,但专门用于加载 XML 和 HTML 等文件。

http://www.stringtemplate.org/api/org/stringtemplate/v4/STRawGroupDir.html

于 2013-07-09T02:42:07.550 回答