使用来自外部目录的文件的Java StringTemplate
我的目录结构如下:使用来自外部目录的文件的Java StringTemplate,java,antlr,antlr4,stringtemplate,stringtemplate-4,Java,Antlr,Antlr4,Stringtemplate,Stringtemplate 4,我的目录结构如下: Templates/ ├── Foo/ │ ├── Foo.st ├── Signature.st 下面是Foo.st的样子: <?xml version="1.0" encoding="UTF-8"?> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> </head> <body> <div id
Templates/
├── Foo/
│ ├── Foo.st
├── Signature.st
下面是Foo.st
的样子:
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
</head>
<body>
<div id="body">
<p> Some Text </p>
</div>
$Signature()$
</body>
</html>
但结果是:
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
</head>
<body>
<div id="body">
<p> Some Text </p>
</div>
</body>
</html>
一些文本
如何使Foo
模板能够正确引用签名模板
如果我将Signature.st
放在Foo
目录中,那么上面的代码工作得很好,但我不能这样做,因为我将有许多模板引用签名
模板。尝试:
...
$/Signature()$
...
模板调用相对于调用模板进行解析。使用前缀
/
启动模板调用将使模板调用成为绝对的-这正是您所期望的。我找到了一种非常简单的方法。我现在有以下目录结构:
Templates/
├── Foo/
│ ├── Foo.st
├── Main.st
├── Signature.st
这是我的Main.st
$ templates : { template |
$(template)()$
}$
$Signature()$
下面是我的java代码:
STRawGroupDir dir = new STRawGroupDir("Templates", '$', '$');
ST st = dir.getInstanceOf("Main");
st.add("templates", Arrays.asList("/Foo/Foo.st"));
st.render();
现在我可以通过任何数量的模板,这是完美的作品
STRawGroupDir dir = new STRawGroupDir("Templates", '$', '$');
ST st = dir.getInstanceOf("Main");
st.add("templates", Arrays.asList("/Foo/Foo.st"));
st.render();