<xsl:if> XSLT

Инструкция xsl:if позволяет создавать простые условия типа “если-то”.

Синтаксис

XSLT 1.0, XSLT 2.0 и XSLT 3.0

<xsl:if test = "выражение">
    <!-- Content: sequence-constructor -->
</xsl:if>

Атрибуты

  • testобязательный атрибут, задает выражение, которое вычисляется и приводится к булевому типу. В том и только том случае, если выражение имеет значение true, процессор выполняет шаблон, содержащийся в xsl:if.

Спецификация

Описание и примеры

Элемент xsl:if является простейшим условным оператором в XSLT. Выражение, содержащееся в обязательном атрибуте test, вычисляется и приводится к булевому типу. В том и только том случае, если выражение имеет значение true, процессор выполняет шаблон, содержащийся в xsl:if.

Вследствие того, что атрибуты в XML не могут содержать некоторые специальные символы (такие как “<” и “&”), их необходимо заменять символьными сущностями. В особенности это касается сравнения чисел типа “меньше”; объявление вида

<xsl:if test="a < b"/>

будет с точки зрения синтаксиса XML некорректным. Вместо него следует использовать эквивалентное объявление

<xsl:if test="a &lt; b"/>

Следует заметить, что символ “больше” (“>”) заменять сущностью необязательно. Однако из соображений единообразия принято заменять и его.

Пример

Предположим, мы преобразовываем список названий

<list active="Bravo">
    <item>Alpha</item>
    <item>Bravo</item>
    <item>Charlie</item>
</list>

во фрагмент HTML-кода, в котором каждый элемент item должен быть преобразован в соответствующий элемент option, а значение, выбранное во входящем документе атрибутом active элемента list, должно быть помечено булевым атрибутом selected.

Листинг 7.23. Шаблон преобразования, использующий элемент xsl:if

<xsl:template match="item">
    <option>
        <!--
        | Если текстовое значение элемента равно
        | значению атрибута active его родительского элемента
        +-->
        <xsl:if test=". = ../@active">
            <!-- To выводим атрибут selected -->
            <xsl:attribute name="selected">selected</xsl:attribute>
        </xsl:if>
        <xsl:value-of select="."/>
    </option>
</xsl:template>

Результат:

<option>Alpha</option>
<option selected>Bravo</option>
<option>Charlie</option>

Примечание: в данном преобразовании использовался метод вывода “html”.

К сожалению, элемент xsl:if в XSLT не может реализовать конструкцию if-then-else (англ. если-то-иначе). Условные выражения такого вида реализуются при помощи элементов xsl:choose, xsl:when и xsl:otherwise.

См. также

Ссылки

MDN xsl:if на MDN
MSDN xsl:if на MSDN