xsl:variable в условии

Вдумчиво штудировать спецификации по xsl времени и особого желания нет, а использовать этот замечательный язык приходиться. Поэтому порой возникают ошибки там, где их не ожидаешь. Приходиться искать решение.

Сегодня возникла задача присвоить переменной значение в зависимости от значения атрибута. Недолго думая я заключил инициализацию в конструкции выбора:

<xsl:choose>
	<xsl:when test="@doctype = 1"><xsl:variable name="doctype">html</xsl:variable></xsl:when>
	<xsl:otherwise><xsl:variable name="doctype">xhtml</xsl:variable></xsl:otherwise>
</xsl:choose>
<xsl:value-of select="$doctype"/>

На что в ответ мне было вывалены ошибки, среди которых:

Variable ‘doctype’ has not been declared

Переменная ‘doctype’ не была объявлена. Я полез в на http://msdn.microsoft.com/, убедился что xsl:variable может быть дочерним элементом xsl:choose. Задумался. Попробовал провернуть тоже самое внутри xsl:if, но опять потерпел неудачу.

Оказалось, для того чтобы присвоить в xsl переменной значение в зависимости от условия, нужно вынести её наружу условия(!), кто бы мог подумать?

Следующая конструкция отработала как следует:

<xsl:variable name="doctype">
<xsl:choose>
	<xsl:when test="@doctype = 1">html</xsl:when>
	<xsl:otherwise>xhtml</xsl:otherwise>
</xsl:choose>
</xsl:variable>

Эта запись была опубликована в рубрике XSLT и отмечена метками , . Добавить в закладки ссылку.

1 в ответ на xsl:variable в условии:

  1. Васисуалий пишет:

    Это справедливо для ситуаций, когда нет необходимости передавать ноду в переменную

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>