Это, очевидно, SSCCE.StringTemplate indentation добавляет пробел внутри строки
У меня есть следующий файл шаблона:
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-файл, даже при обрезке пробелов, значение 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, как есть (без отступов в случае появления новых строк внутри), и в то же время сохранить пробелы/отступы для всех других случаев (так что мой сделанный вывод не будет уродливым)?
Update
Я попытался с помощью NoIndentWriter но был встречен with other problems. Таким образом, кажется, что NoIndentWriter
действительно испускает многострочную строку, как она есть, но делает не честь пробела присутствует в файле шаблона. Поэтому я вернулся на первый план.
Включил ли содержимое в '' раздел изменить результат? – dasblinkenlight
@dasblinkenlight Я не уверен, что понимаю, что вы предлагаете. Во всяком случае, если CDATA добавлен в шаблон, то ничего не меняется относительно вставки пробелов во время отступов многострочной строки. Кроме того, я не уверен, что добавление раздела CDATA в мой заключительный документ не содержит побочных эффектов. –
Я думал о '', надеясь, что stringtemplate обратит внимание на разделы 'CDATA'. Похоже, что нет. Ну хорошо ... – dasblinkenlight