Создание преобразованных узлов
После того как к текущему узлу подобрано правило его преобразования, выполняется конструктор последовательности узлов и атомарных значений, записанный в этом правиле. Определение конструктора носит чрезвычайно общий характер.
Конструктор последовательности - это последовательность узлов таблицы стилей, имеющих общий родительский узел, применение которой дает последовательность узлов и атомарных значений. Общий родительский узел, о котором идет речь в определении, - это чаще всего узел-элемент xsl:template, хотя им могут служить элементы xsl:variable, xsl:param и многие другие элементы XSLT.
В конструкторе последовательности могут встречаться четыре вида узлов:
- текстовые узлы, которые будут просто скопированы в конструируемую последовательность.
- узлы-инструкции XSLT, генерирующие последовательности узлов и атомарных значений;
- внешние, не XSLT-инструкции с именами из пространства имен, отличного от пространства имен XSLT. Они тоже генерируют последовательности узлов и атомарных значений;
- элементы из пространства имен, отличного от пространства имен XSLT, не являющиеся внешними инструкциями. Они становятся узлами-элементами конструируемой последовательности.
Узлы-инструкции, входящие в конструктор, выполняются и вместе с остальными узлами конструктора образуют одну последовательность узлов и/или атомарных значений. Все подряд идущие атомарные значения из созданной конструктором последовательности преобразуются в строки и собираются в один текстовый узел, в котором они записываются через пробел. Затем в полученной последовательности узлов все подряд идущие текстовые узлы собираются в один текстовый узел без всяких разделителей.
Итак, после применения каждого правила получается последовательность узлов, а после использования всех правил таблицы стилей ко всем выбранным узлам исходного дерева получается набор таких последовательностей. Осталось собрать из этого набора последовательностей одно или несколько деревьев, которые и будут результатом преобразования. Они создаются или явно элементами xsl:result-document, или неявно начальным правилом преобразования.
Очень часто преобразованное дерево выводится на какое-то устройство в виде документа HTML, XHTML, XML или просто в виде плоского ASCII-текста. В самом простом случае выполняется сериализация, для которой в языке XSLT предусмотрен элемент xsl:output.