Как я могу изменить существующий код Java XSLT, используя Xalan, чтобы использовать Saxon и TinyTree - PullRequest
1 голос
/ 23 января 2009

У меня есть некоторый существующий код Java, который выполняет XSLT-преобразование программным способом - изначально с использованием Xalan. Я реорганизовал его, чтобы можно было использовать другой (внешне настроенный) 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
- org.apache.xalan.processor.TransformerFactoryImpl для Xalan
- net.sf.saxon.TransformerFactoryImpl для Saxon 8.7 и
- com.icl.saxon.TransformerFactoryImpl для Saxon 6.5.3

Есть предложения?

Ответы [ 2 ]

1 голос
/ 12 мая 2009

На самом деле, когда вы предоставляете Saxon StreamSource, он должен по умолчанию использовать TinyTree для внутреннего использования.

Что касается скорости: как заметил саксонский автор, Xalan делает одну из 2 возможностей, в зависимости от таблицы стилей: быструю или правильную. Саксон всегда делает все правильно, что в некоторых случаях означает, что это медленнее. Частично проблема заключается в том, что спецификация XSLT 1.0 определяет некоторые вещи, которые должны вести себя таким образом, который очень трудно оптимизировать правильно (но довольно просто, если изменить поведение на несоответствующее).

Однако, несмотря на это, я всегда считал, что Saxon работает быстрее или быстрее с более сложными таблицами стилей. Xalan часто быстрее для простых.

Наконец, Saxon был значительно оптимизирован с течением времени, поэтому убедитесь, что вы используете более новую версию (Saxon 9.1)

1 голос
/ 27 января 2009

саксонский 7 документов вы можете вывести tf.setAttribute(net.sf.saxon.FeatureKeys.TREE_MODEL,Builder.TINY_TREE);

Однако они также говорят, что это по умолчанию.

...