В XSLT есть операторы управления — управляющие конструкции, что делает его близким к программированию. Среди управляющих операторов в XSLT различают:
- условный оператор if;
- оператор выбора;
- цикл;
- рекурсия.
Содержание статьи
Условная конструкция
Разберем синтаксис:
<xsl:if test="expression">
<!-- content:template -->.
</xsl:if>
В первую строчку подсовывается любое XPath выражение. Если это выражение true, то контент (содержимое if) будет обработан. Если false — ничего не произойдет.
Внимание! У конструкции if нет else. Поэтому чаще используют конструкцию, в которой else есть — это конструкция выбора.
Конструкция выбора
Рассмотрим синтаксис:
<xsl:choose>
<xsl:when test="boolean-expression">
<!-- content:template -->
</xsl:when>
<xsl:when test="boolean-expression">
<!-- content:template -->
</xsl:when>
<xsl:otherwise>
<!-- content -->
</xsl:otherwise>
</xsl:choose>
Т.е. здесь множественный выбор, несколько условий. Процессор последовательно проверяет условия до первого совпадения. Какое условие первое совпадает, тот блок и обрабатывается. Если хоть одно условие сработало, остальные уже не проверяются. Если не сработало ни одно из условий, тогда выполняется блок otherwise (иначе).
Циклическая конструкция
Синтаксис:
<xsl:for-each select="expression">
<!-- content:(xsl:sort*,template) -->
</xsl:for-each>
Т.е. это цикл. В первую строку вставляется любое XPath выражение (expression), выбирающее набор узлов. Дальше для каждого из выбранных узлов выполняется все, что написано внутри тела for-each.
Рекурсивная конструкция
Синтаксис:
<xsl:template match="myElement">
...
<xsl:apply-templates select="myElement"/>
...
</xsl:template>
Здесь используется рекурсия (вызов самого себя). Шаблон myElement выбирает шаблон myElement и сам себя начинает гонять.
Сортировка значений
Многие конструкции связаны с подвыборкой элементов (например, apply-templates, for-each), т.е. они берут набор узлов.
Те элементы, которые слпряжены с выборкой элементов, обрабатывают найденные узлы по принципу как они ему встретились, т.е. как они написаны в исходном файле. Довольно часто нам нужно их поменять местами. И тогда используют конструкцию сортировки:
<xsl:sort
select="expression" <!-- по какому выражению сортировать -->
lang="language-code" <!-- правила какого языка использовать -->
data-type="text|numver|qname" <!-- как рассматривать данные: текст, цифра, возможное расширение конкретного процессора -->
order="ascending|descending" <!-- сортировать по возрастанию|убыванию -->
case-order="upper-first|lower-first"/> <!-- сначала большие или маленькие буквы -->