</xsl:for-each>

Если результат имеет известную регулярную структуру, полезно иметь возможность указать это прямо в шаблоне для собираемых узлов. Инструкция xsl:for-each содержит шаблон, который обрабатывается для каждого узла, отобранного выражением, указанным в атрибуте select. Атрибут select является обязательным. Результатом обработки выражения должен быть набор узлов. При обработке шаблона выбранный узел берется в качестве текущего узла, а весь список собранных узлов берется в качестве текущего набора узлов. Узлы обрабатываются в том порядке как они следуют в документе, если нет указаний относительно сортировки (см. [10 Сортировка]).

Например, дан XML документ со следующей структурой

<customers>

<customer>

<name>…</name>

<order>…</order>

<order>…</order>

</customer>

<customer>

<name>…</name>

<order>…</order>

<order>…</order>

</customer>

</customers>

Следующий пример должен создать HTML документ, содержащий таблицу, где каждому элементу customer отводится отдельная строка.

<xsl:template match='/'>

<html>

<head> <title>Customers</title> </head>

<body>

<table>

<tbody>

<xsl:for-each select='customers/customer'>

<tr>

<th> <xsl:apply-templates select='name'/>

</th>

<xsl:for-each select='order'>

<td> <xsl:apply-templates/> </td>

</xsl:for-each>

</tr>

</xsl:for-each>

</tbody>

</table>

</body>

</html>

</xsl:template>

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>

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

0

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

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