Если вы запрашиваете потоковую передачу (например, <xsl:mode streamable="yes"/>
) и используете Saxon 9.8 или 9.9 EE (пока единственные реализации, поддерживающие эту часть XSLT 3), тогда он выполнит анализ исправности вашего кода во время компиляции таблицы стилей и сообщит Вы использовали ли какие-либо конструкции, которые он не считает пригодными для обработки.
По крайней мере, так будет, если вы запустите Saxon из командной строки. Внутри oXygen я думаю, вам явно нужно запросить в Saxon EE указанные c параметры сценария преобразования, которые вы хотите использовать потоковую передачу (см. https://www.oxygenxml.com/doc/versions/21.1/ug-editor/topics/advanced-saxon-xslt-options-x-publishing2.html?hl=streaming и параметр «Включить режим потоковой передачи»).
Как и в большинстве конфигураций Saxon, есть также возможность использовать файл конфигурации http://saxonica.com/html/documentation/configuration/configuration-file/.
Если вы запрашиваете потоковую передачу в своем коде и запускаете Saxon EE из командной строки тогда он не выполнит код, если не считает его пригодным для обработки.
Это грубый обзор, подробности см. http://saxonica.com/html/documentation/sourcedocs/streaming/.
Кроме того, как только вы получите анализ стримабельности, вы можете использовать опцию -t
в командной строке, она покажет, какой синтаксический анализатор используется для какого входного документа и построено ли дерево или оно обрабатывается с помощью потоковой передачи.
По моему опыту, вам нужно переучиваться, как использовать XSLT, если вы хотите использовать потоковую передачу, многие методы, которые вы могли бы использовать (xsl:call-template
, хранение узлов в переменных), могут не работать если вы имеете дело с чистой потоковой передачей. Часто есть способ смешать потоковую передачу с традиционной обработкой на основе дерева, используя copy-of()
и / или snapshot()
. Существуют также новые функции, такие как аккумуляторы, которые помогают сделать ваш код пригодным для обработки, например, если вы используете их вместо xsl:number
или вместо ключей.