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>

10 Сортировка

<xsl:sort

select = string-expression

lang = { nmtoken }

data-type = { «text» | «number» | qname-but-not-ncname }

order = { «ascending» | «descending» }

case-order = { «upper-first» | «lower-first» } />

Сортировка задается с помощью элементов xsl:sort, данных как непосредственный потомок элемента xsl:apply-templates или xsl:for- each. Первый непосредственный потомок xsl:sort задает первичный ключ сортировки, второй непосредственный потомок xsl:sort задает вторичный ключ сортировки, и так далее. Если элемент xsl:apply-templates или xsl:for-each имеет одного или несколько непосредственных потомков xsl:sort, то вместо того чтобы обрабатывать выбранные узлы в том порядке как они следуют в документе, сперва производится их упорядочение в соответствии с заданными ключами сортировки, и лишь затем они обрабатываются в полученном порядке. При использовании в xsl:for-each элементы xsl:sort должны ставиться в начале. Если обрабатывается шаблон из xsl:apply-templates и xsl:for- each, то в качестве текущего набора узлов берется полный отсортированный список обрабатываемых узлов.

xsl:sort имеет атрибут select, значением которого является выражение. Указанное выражение вычисляется для каждого узла, подлежащего обработке. При этом данный узел используется в качестве текущего узла, а полный неупорядоченный список узлов, подлежащих обработке, выступает в роли текущего набора узлов. Полученный после вычисления объект преобразуется в строку как при вызове функции string. Данная строка используется как ключ сортировки для этого узла. По умолчанию атрибут select имеет значение, которое приводит к тому, что в качестве ключа сортировки используется строковое значение текущего узла.

Полученная строка используется как ключ сортировки для данного узла. Ниже приведены необязательные атрибуты элемента xsl:sort, управляющие упорядочением списка

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату