java StringTemplate缩进在字符串中添加空格
这显然是一个SSCCE
我有以下模板文件:
xml(value)::=<<
<a>
<b>
^value^
</b>
</a>
>>
。。。使用以下代码:
private static final String VALUE="alpha\nbeta";
public static void main(String args[]) throws Exception {
STGroup stGroup = new STGroupFile("templates/a.xml.stg", '^', '^');
ST st = stGroup.getInstanceOf("xml");
st.add("value", VALUE);
System.out.printf("--------\n%s\n--------", st.render());
}
该代码生成:
[java] --------
[java] <a>
[java] <b>
[java] alpha
[java] beta
[java] </b>
[java] </a>
[java] --------
换句话说,字符串值在添加空格时被修改。当客户机解析XML文件时,即使有空格修剪,字符串值也会被视为已更改,因为空格已添加到字符串中
我理解解决方案是将模板声明为:
xml(value)::=<<
<a>
<b>^value^</b>
</a>
>>
。。。但是,即使是这种解决方案也要求可能包含xml
呈现的所有其他节点也是正确的
例如,假设上述渲染值嵌入到另一个模板中,则以下模板:
enclosing-document(xml)::=<<
<h1>
<h2>
^xml^
</h2>
</h1>
>>
。。。还必须重写为:
enclosing-document(xml)::=<<
<h1>
<h2>
^xml^
</h2>
</h1>
>>
。。。实际上,需要确保所有节点的左对齐
有没有一种方法可以指示StringTemplate只按原样发出一个特定的字符串参数(如果其中出现新行,则不缩进),同时为所有其他情况保留空白/缩进(这样我的渲染输出就不会很难看)
更新
我尝试使用NoIndentWriter,但遇到了with other problems。因此NoIndentWriter
看起来确实发出了多行字符串,但是没有尊重模板文件中存在的空白。所以我回到了原点
# 1 楼答案
所以最后我做的是使用NoIndentWriter和给定的in this post代码。然后,为了解决缺乏缩进导致丑陋的XML(在前面的帖子中抱怨过)的问题,我使用了here描述的XML漂亮打印机