9 Обработка с условием
В XSLT в шаблоне обработку с условием поддерживают две инструкции: xsl:if
и xsl:choose
. Инструкция xsl:if
дает простую функциональность if-then, инструкция xsl:choose
поддерживает выбор одного из нескольких возможных вариантов.
9.1 Обработка с условием xsl:if
<!-- Category:
instruction -->
<xsl:if
test =
boolean-expression>
<!-- Content:
template -->
</xsl:if>
Элемент xsl:if
имеет атрибут test
, который определяет некое выражение. Содержимое элемента является шаблоном. Указанное выражение обрабатывается, а полученный объект преобразуется в булево значение как при вызове функции boolean. Если результатом является true, то подставляется шаблон, имеющийся в выражении. В противном случае не создается ничего. В следующем примере группа имен оформляется в виде списка через запятую:
<xsl:template match="namelist/name">
<xsl:apply-templates/>
<xsl:if test="not(position()=last())">, </xsl:if>
</xsl:template>
В следующем примере каждый второй ряд таблицы раскрашивается желтым:
<xsl:template match="item">
<tr>
<xsl:if test="position() mod 2 = 0">
<xsl:attribute name="bgcolor">yellow</xsl:attribute>
</xsl:if>
<xsl:apply-templates/>
</tr>
</xsl:template>
9.2 Обработка с условием xsl:choose
<!-- Category:
instruction -->
<xsl:choose>
<!-- Content: (xsl:when+, xsl:otherwise?)
-->
</xsl:choose>
<xsl:when
test =
boolean-expression>
<!-- Content:
template -->
</xsl:when>
<xsl:otherwise>
<!--
Content: template -->
</xsl:otherwise>
Среди нескольких возможных альтернатив элемент xsl:choose
выбирает одну. Он состоит из последовательности элементов xsl:when
, за которой следует необязательный элемент xsl:otherwise
. Каждый элемент xsl:when
имеет единственный атрибут test
, который задает некое выражение. Содержимое элементов xsl:when
и xsl:otherwise
является шаблоном. Если обрабатывается элемент xsl:choose
, поочередно проверяются все элементы xsl:when
. При этом обрабатывается соответствующее выражение, а полученный объект преобразуется в булевый тип как при вызове функции boolean. Обрабатывается содержимое первого, и только первого элемента xsl:when
, при проверке которого было получено true. Если ни один из xsl:when
не показал true, подставляется значение элемента xsl:otherwise
. Если ни один из xsl:when
не показал true, а элемент xsl:otherwise
отсутствует, то ничего не создается.
В следующем примере пункты в упорядоченном списке нумеруются с помощью арабских цифр, букв или римских цифр в зависимости от глубины вложенности упорядоченных списков.
<xsl:template match="orderedlist/listitem">
<fo:list-item indent-start='2pi'>
<fo:list-item-label>
<xsl:variable name="level"
select="count(ancestor::orderedlist) mod 3"/>
<xsl:choose>
<xsl:when test='$level=1'>
<xsl:number format="i"/>
</xsl:when>
<xsl:when test='$level=2'>
<xsl:number format="a"/>
</xsl:when>
<xsl:otherwise>
<xsl:number format="1"/>
</xsl:otherwise>
</xsl:choose>
<xsl:text>. </xsl:text>
</fo:list-item-label>
<fo:list-item-body>
<xsl:apply-templates/>
</fo:list-item-body>
</fo:list-item>
</xsl:template>
Назад |
Содержание |
Вперед