Недопустимый символ StringTemplate '<' при чтении шаблона XML
Я пытаюсь создать простой XML-шаблон, который пока состоит только из:
<?xml version="1.0"?>
Я читаю файл так:
STGroup group = new STGroupDir("templates");
ST st = group.getInstanceOf("report");
st.add("analysis", ana);
String result = st.render();
System.out.println(result);
И в результате несколько сообщений об ошибках:
report.st 1:1: invalid character '<'
report.st 1:1: invalid character '?'
report.st 1:19: invalid character '?'
report.st 1:20: invalid character '>'
report.st 1:2: no viable alternative at input 'xml'
Я видел других людей, читающих шаблоны HTML, которые также используют теги. Так что я делаю не так?
3 ответа
Хорошо, кажется, я упустил из виду, что вам нужно указывать шаблоны в другом snytax. Хотя это не было очевидно из примеров, которые я использовал:
Мой рабочий шаблон теперь выглядит иначе:
report (analysis) ::= <<
<?xml version="1.0"?>
>>
Кроме того, я также изменил разделители:
STGroup group = new STGroupDir("templates",'$','$');
Я обнаружил, что вы можете избежать угловой скобки:
report(analysis) ::= <<
\<?xml version="1.0"?>
>>
Обратите внимание \
прямо перед <?xml
- Кроме того, он достаточно умен, чтобы не требовать еще одного побега на ?>
закрывающая скобка
И я полагаю, что Терренс Парр предлагает разделить модель / представление на то, что представление никогда не имеет возможности манипулировать базовой структурой данных (или моделью), передаваемой шаблону. Это достигается путем "применения" шаблона к данным или коллекции, а не зацикливания шаблона над данными. Возможно, это тонко, и, возможно, практически (в случае дизайнеров) немного слишком чисто.
Кроме того, вы можете использовать STRawGroupDir, если вы не хотите использовать синтаксис группового файла. Этот класс похож на STGroupDir, но специально для загрузки файлов, таких как XML и HTML.
http://www.stringtemplate.org/api/org/stringtemplate/v4/STRawGroupDir.html