java - StringTemplate 缩进在 String 中添加空格

标签 java stringtemplate stringtemplate-4

这显然是 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 按原样发出特定的 String 参数(如果其中存在新行则不缩进它)同时为所有其他情况保留空白/缩进(以便我呈现输出不会难看)?

更新

我尝试使用 NoIndentWriter却遇见了with other problems .所以看来 NoIndentWriter 确实按原样发出了多行字符串,但尊重模板文件中存在的空格。所以我回到了第一个广场。

最佳答案

所以最后我所做的是使用 NoIndentWriter使用给定的代码 in this post .然后,为了解决导致难看的 XML 的缺乏缩进(在上述帖子中提示),我使用了描述的 XML pretty-print here .

关于java - StringTemplate 缩进在 String 中添加空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27889951/

相关文章:

java - Hibernate后端条件查询包含: where(1=1) what does it means?

java - GWT 请求工厂 - 在另一个请求的成功方法内触发请求

java - 整洁的架构、数据请求编排器、演示器或用例/交互器?

java - 在 stringtemplate v4 中实现自定义函数

java - NoSuchBeanDefinitionException 如何初始化 SessionFactory bean?

templates - 在哪里可以下载使用 stringtemplate 的完整示例 java 项目?

java - StringTemplate 将字符串渲染为大写

python - 使用字符串模板在python中制作quine?

java - 生成非常大的 Java 代码

stringtemplate - StringTemplate 中带有动态条目的字典