Выдано 109534 лицензии

Инструкция choose

Среди нескольких возможных альтернатив элемент 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:choose, а за ним дополнительные (один или несколько) элементы xsl:when, если требуется обрабатывать значение не подпадающее ни под одно из условий имеющихся элементов xsl:when, то вы можете добавить элемент xsl:otherwise.

Прототип:

<!-- 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-шаблон:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="/document">
		<html>
			<head>
				<title><xsl:value-of select="title"/></title>
			</head>
			<body>
				<!-- Выбираем узлы structure -->
				<xsl:for-each select="structure">
					<p>
					<!-- Проверка на параметр id -->
						<xsl:choose>
							<xsl:when test="@id = 1">
								<font color="red">Значение:</font>
							</xsl:when>
							<xsl:when test="@id > 1">
								Значение:
							</xsl:when>
							<xsl:otherwise>
								Значение:
							</xsl:otherwise>
						</xsl:choose>
						<xsl:value-of disable-output-escaping="yes" select="value"/>
					</p>
				</xsl:for-each>
			</body>
		</html>
	</xsl:template>
</xsl:stylesheet>

В результате получится HTML-документ:

<html>
	<head>
		<META http-equiv="Content-Type" content="text/html; charset=UTF-16">
		<title>Заголовок 1</title>
	</head>
	<body>
		<p><font color="red">Значение:</font> aaa</p>
		<p>Значение: bbb</p>
	</body>
</html>