相互にフィードする一連の 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 を使用しています。DOM は便利ですが、パフォーマンスに関しては最適ではありません。
SAXResult を SAXSource にルーティングする簡単な方法はありますか? 別の選択肢として、StAX ソリューションがあります。
XProcのようなプロジェクトは知っていますが、まだ見ていないのであれば非常にクールですが、フレームワーク全体に投資するつもりはありませんでした。