У меня есть серия таблиц стилей XSL 2.0, которые вставляются друг в друга, то есть выходные данные таблицы стилей A подают каналы B, а каналы C.
Какой самый эффективный способ сделать это? Перефразируемый вопрос таков: как можно эффективно направить результаты одного преобразования в другое.
Вот моя первая попытка:
@Override
public void transform(Source data, Result out) throws TransformerException{
for(Transformer autobot : autobots){
if(autobots.indexOf(autobot) != (autobots.size()-1)){
log.debug("Transforming prelim stylesheet...");
data = transform(autobot,data);
}else{
log.debug("Transforming final stylesheet...");
autobot.transform(data, out);
}
}
}
private Source transform(Transformer autobot, Source data) throws TransformerException{
DOMResult result = new DOMResult();
autobot.transform(data, result);
Node node = result.getNode();
return new DOMSource(node);
}
Как видите, я использую DOM, чтобы сидеть между преобразованиями, и хотя это удобно, это неоптимальная производительность.
Есть ли какой-нибудь простой способ указать, направить ли SAXResult к SAXSource? Решение StAX было бы другим вариантом.
Мне известны такие проекты, как XProc , что очень здорово, если вы еще не взглянули на них, но я не хотел вкладывать средства в целую среду.