Языки информационного обмена

Создание преобразованных узлов


После того как к текущему узлу подобрано правило его преобразования, выполняется конструктор последовательности узлов и атомарных значений, записанный в этом правиле. Определение конструктора носит чрезвычайно общий характер.

Конструктор последовательности - это последовательность узлов таблицы стилей, имеющих общий родительский узел, применение которой дает последовательность узлов и атомарных значений. Общий родительский узел, о котором идет речь в определении, - это чаще всего узел-элемент xsl:template, хотя им могут служить элементы xsl:variable, xsl:param и многие другие элементы XSLT.

В конструкторе последовательности могут встречаться четыре вида узлов:

  • текстовые узлы, которые будут просто скопированы в конструируемую последовательность.
  • узлы-инструкции XSLT, генерирующие последовательности узлов и атомарных значений;
  • внешние, не XSLT-инструкции с именами из пространства имен, отличного от пространства имен XSLT. Они тоже генерируют последовательности узлов и атомарных значений;
  • элементы из пространства имен, отличного от пространства имен XSLT, не являющиеся внешними инструкциями. Они становятся узлами-элементами конструируемой последовательности.

Узлы-инструкции, входящие в конструктор, выполняются и вместе с остальными узлами конструктора образуют одну последовательность узлов и/или атомарных значений. Все подряд идущие атомарные значения из созданной конструктором последовательности преобразуются в строки и собираются в один текстовый узел, в котором они записываются через пробел. Затем в полученной последовательности узлов все подряд идущие текстовые узлы собираются в один текстовый узел без всяких разделителей.

Итак, после применения каждого правила получается последовательность узлов, а после использования всех правил таблицы стилей ко всем выбранным узлам исходного дерева получается набор таких последовательностей. Осталось собрать из этого набора последовательностей одно или несколько деревьев, которые и будут результатом преобразования. Они создаются или явно элементами xsl:result-document, или неявно начальным правилом преобразования.

Очень часто преобразованное дерево выводится на какое-то устройство в виде документа HTML, XHTML, XML или просто в виде плоского ASCII-текста. В самом простом случае выполняется сериализация, для которой в языке XSLT предусмотрен элемент xsl:output.



Содержание раздела