Инструкция choose
Последний xslt-элемент, который я хочу вам продемонстрировать, это элемент choose. Он очень похож на инструкцию switch языка программирования C.
Первым должен идти элемент xsl:choose, а за ним дополнительные (один или несколько) элементы xsl:when, если требуется обрабатывать значение не подпадающее ни под одно из условий имеющихся элементов xsl:when, то вы можете добавить элемент xsl:otherwise:
<xsl:variable name="even" select="position() mod 2"/>
<xsl:choose> <xsl:when test="$even = 1"> <![CDATA[<table width="100%" bgcolor="#cccccc">]]> </xsl:when> <xsl:when test="$even = 0"> <![CDATA[<table width="100%" bgcolor="#99b0bf">]]> </xsl:when> <xsl:otherwise> <![CDATA[<table width="100%" bgcolor="#ffffff">]]> </xsl:otherwise> </xsl:choose>
Функция position() возвращает порядковый номер обрабатываемого элемента, в нашем случае -- документа. В данном примере нас интересует только четность порядкового номера, тем самым мы получаем возможность выделять четные и нечетные строки таблицы различным цветом. Я поместил элемент xsl:otherwise исключительно в демонстрационных целях, фактически же вы никогда не увидите строку с белым фоном в нашей таблице.
Если вы спросите меня зачем я вставил секцию CDATA, то я вам отвечу, если бы я этого не сделал, то XSLT-процессор генерировал бы сообщения об ошибке по поводу отсутствия закрывающего тега (</table>), но в нашем случае этот тег находится ниже. По той же самой причине, закрывающий тег </table> так же должен быть оформлен в виде секции CDATA.
Я привел лишь короткий отрывок из примера, полный текст файлов xsl и html вы найдете по ссылкам: