1

Xalan を使用して、XSLT 変換をプログラムで実行する既存の Java コードがいくつかあります。別の (外部で構成された) TransformerFactory を使用できるようにリファクタリングしました。

Saxon (v6.5.3 および v8.7) ファクトリを使用してみましたが、パフォーマンスの向上は見られません。Saxon は Xalan よりも遅く、メモリを多く使用します。

Saxon TinyTree を使用してパフォーマンスの利点を得ることができることは理解していますが、このコードでその方法を理解することはできません。

私のコードは次の形式です。

TransformerFactory tf = (TransformerFactory) transformerFactoryClass.newInstance();
Transformer t = tf.newTransformer(pTransformFile);
t.transform(new StreamSource(pSourceFile), new StreamResult(pTargetFile));

ここで、「transformerFactoryClass」は構成済みの TransformerFactory クラスのインスタンスです。Xalan の場合は
org.apache.xalan.processor.TransformerFactoryImpl
、Saxon 8.7 の場合は
net.sf.saxon.TransformerFactoryImpl、Saxon 6.5.3 の場合は com.icl.saxon.TransformerFactoryImpl です。

助言がありますか?

4

2 に答える 2

1

Saxon7のドキュメントはあなたができると推測しますtf.setAttribute(net.sf.saxon.FeatureKeys.TREE_MODEL,Builder.TINY_TREE);

しかし、彼らはそれがデフォルトであるとも言います。

于 2009-01-27T11:49:50.407 に答える
1

実際、Saxon に StreamSource を与えると、デフォルトで TinyTree を内部的に使用する必要があります。

速度に関して: Saxon の作成者が皮肉を言ったように、Xalan はスタイルシートに応じて 2 つの可能性のうちの 1 つを実行します: 高速または正確。Saxon は常に正しく動作しますが、場合によっては動作が遅くなります。問題の一部は、XSLT 1.0 仕様が、正しく最適化するのが非常に難しい方法で動作するように特定のものを定義していることです (ただし、動作を非準拠に変更する場合はむしろ簡単です)。

しかし、それだけの価値はありますが、Saxon は、より複雑なスタイルシートを使用しても、同じかそれ以上に高速であることが常にわかりました。Xalan は、より単純なものの方が高速であることがよくあります。

最後に、Saxon は長い時間をかけて最適化されてきたので、最新バージョン (Saxon 9.1) を使用してください。

于 2009-05-12T06:17:11.600 に答える