Не впервой раз нужно cобрать xml. В этот раз это динамически генерирующийся шаблон для JasperReports. Каждый раз когда натыкаюсь на подобные задачи, заканчиваю неким подобием такого решения:
private static final String begin = "<item>";
private static final String body = "<node name=\"{name}\"/>";
private static final String end = "</item>";
pubilc static String generate(){
StringBuilder sb = new StringBuilder();
sb.append(begin);
sb.append(body.replace("{name}","Batman");
sb.append(end);
return sb.toString();
}
Нет, это работает. Аналогичным образом и xml заготовки воедино собираю. Погибче бы чего нибудь, ну и просто интересно, может кто знает чего, чтобы большую xml собирать из мелких заготовок было поудобней, чем через StringBuilder. В данном случае гоняюсь именно за удобством, а не производительностью, хотя ее тоже не хотелось бы из виду терять.
А если кто сможет конструктивно обругать мой метод, то это будет вообще замечательно!
Пример: раньше вручную копировал файлы, а потом нашел apache.commons.io и все стало на порядок проще. Также ожидаю и тут чего нибудь найти.
UPD: Виноват, вы дали мне понять, что неверно объяснил походу. Я не собираю весь xml таким образом по узлам. У меня append()'ом собираются целые блоки xml. Т.е. в данном случае задача нисколько не изменится в моем контексте, если скажу что вместое xml собираю просто текстовые фрагменты в определенном порядке, заменяя некие переменные. Т.е. мне не нужна ни валидация xml, ни стройное дерево DOM в памяти. Потоком пишется текстовый файл.
Просто меня не покидает ощущение, что большинство предложенных тут решений сложнее чем мне надо.
UPD выбрал Velocity, просто и понятно