这显然是一个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] --------
换句话说,在添加空格时修改String值。当客户端解析XML文件时,即使使用空格修剪,String值也会被视为已更改,因为在内部字符串中添加了空格。
我知道解决方案是将模板声明为:
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按原样发出特定的String参数(如果内部存在新行,则不缩进),同时保留所有其他情况的空格/缩进(以便我呈现输出不会很丑陋)?
我尝试使用NoIndentWriter,但遇到了with other problems。所以看起来NoIndentWriter
确实会发出多行字符串,但是不会尊重模板文件中存在的空格。所以我回到了原点。
答案 0 :(得分:0)
所以最后我做的是使用NoIndentWriter和in this post给出的代码。然后,为了解决缺少导致丑陋XML的缩进(在前面提到的帖子中抱怨),我使用了描述here的XML漂亮打印机。