Чтение онлайн

ЖАНРЫ

Технология XSLT

Валиков Алексей Н.

Шрифт:

<xsl:value-of select="$gt"/> <xsl:value-of select="$gt"/>

<xsl:value-of select="$j"/> <xsl:value-of select="$j"/>

</xsl:variable> </xsl:variable>

<result> <result>

<xsl:copy-of select="$k"/> <xsl:copy-of select="$k"/>

</result> </result>

</xsl:if> </xsl:if>

 </xsl:template> </xsl:template>

 <xsl:variable name="gt"> <xsl:variable name="gt">

is greater than is greater than

 </xsl:variable> </xsl:variable>

</xsl:stylesheet> </xsl:stylesheet>

Область

видимости переменной
k
Область видимости переменной
gt

<xsl:stylesheet <xsl:stylesheet

 version="1.0" xmlns:xsl="... "> version="1.0" xmlns:xsl="... ">

 <xsl:template match="/"> <xsl:template match="/">

<xsl:variable name="i" <xsl:variable name="i"

select="2"/> select="2"/>

<xsl:variable name="j" <xsl:variable name="j"

select="$i - 1"/> select="$i - 1"/>

<xsl:if test="$i > $j"> <xsl:if test="$i > $j">

<xsl:variable name="k"> <xsl:variable name="k">

<xsl:value-of select="$i"/> <xsl:value-of select="$i"/>

<xsl:value-of select="$gt"/> <xsl:value-of select="$gt"/>

<xsl:value-of select="$j"/> <xsl:value-of select="$j"/>

</xsl:variable> </xsl:variable>

<result> <result>

<xsl:copy-of select="$k"/> <xsl:copy-of select="$k"/>

</result> </result>

</xsl:if> </xsl:if>

 </xsl:template> </xsl:template>

 <xsl:variable name="gt"> <xsl:variable name="gt">

is greater than is greater than

 </xsl:variable> </xsl:variable>

</xsl:stylesheet> </xsl:stylesheet>

В XSLT действует то же правило, что и во многих других языках программирования: нельзя дважды определять переменную с один и тем же именем. Однако и тут есть свои особенности.

□ Имена двух глобальных переменных могут совпадать в том и только том случае, когда они имеют разный порядок импорта.

Например, если переменные с одинаковыми именами определены в разных преобразованиях, одно из них может быть импортировано. В этом случае переменная будет иметь значение, которое задано элементом
xsl:variable
со старшим порядком импорта.

□ Допускается совпадение имен локальной и глобальной переменных — в этом случае в области видимости локальной переменной будет использоваться локальное значение, в области видимости глобальной (но не локальной) — глобальное значение. Иными словами, локальные переменные "закрывают" значения глобальных.

□ Две локальные переменные могут иметь совпадающие имена в том и только том случае, если их области видимости не пересекаются.

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

Пример

Предположим, что в следующем преобразовании в шаблоне с именем

choice
мы генерируем два элемента
input
.

Листинг 5.24. Преобразование en.xsl

<xsl:stylesheet

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:variable name="submit" select="'Submit'"/>

 <xsl:variable name="reset" select="'Reset'"/>

 <xsl:template name="choice">

<input type="button" value="{$submit}"/>

<xsl:text>&#xA;</xsl: text>

<input type="reset" value="{$reset}"/>

 </xsl:template>

 <xsl:template match="/">

<xsl:call-template name="choice"/>

 </xsl:template>

</xsl:stylesheet>

Результатом этого преобразования будет следующий фрагмент:

<input type="button" value="Submit"/>

<input type="reset" value="Reset"/>

Для того чтобы перевести надписи на этих кнопках на другой язык достаточно просто переопределить переменные. Например, результатом выполнения следующего шаблона.

Листинг 5.25. Преобразование de.xsl

<xsl:stylesheet

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:import href="#"/>

 <xsl:variable name="submit" select="'Senden'"/>

Поделиться с друзьями: