有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

  1. # 1 楼答案

    所以最后我做的是使用NoIndentWriter和给定的in this post代码。然后,为了解决缺乏缩进导致丑陋的XML(在前面的帖子中抱怨过)的问题,我使用了here描述的XML漂亮打印机