Отступ StringTemplate добавляет пробел внутри String
Это, очевидно, 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 будет восприниматься как измененное, поскольку пробел был добавлен внутри 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, но столкнулся с другими проблемами. Похоже, что NoIndentWriter
действительно выдает многострочную строку как есть, но не учитывает пробелы, присутствующие в файле шаблона. Так что я вернулся на круги своя.
1 ответ
Итак, в итоге я использовал NoIndentWriter с кодом, приведенным в этом посте. Затем, чтобы решить проблему отсутствия отступов, приводящих к уродливому XML (о чем жаловалось в вышеупомянутом посте), я использовал описанный здесь симпатичный принтер XML.