Вход/Регистрация
Технология XSLT
вернуться

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

Шрифт:

Рассмотрим теперь случай двух локальных переменных. Попробуем объявить две локальные переменные — одну за другой в следующем шаблоне:

<xsl:stylesheet

 version="1.0"

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

 <xsl:template match="/">

<xsl:variable name="i" select="1"/>

<xsl:text>i equals </xsl:text>

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

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

<xsl:variable name="i" select="2"/>

<xsl:text>i equals </xsl:text>

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

 </xsl:template>

</xsl:stylesheet>

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

Failed to compile style sheet

At xsl:variable on line 9 of file stylesheet.xsl:

Variable is already declared in this template

Приведем теперь другое преобразование, в котором элементы

xsl:variable
принадлежат двум братским элементам:

<xsl:stylesheet

 version="1.0"

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

 <xsl:template match="/">

<xsl:variable name="i" select="1"/>

<xsl:text>i equals </xsl:text>

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

<xsl:variable name="i" select="2"/>

<xsl:text>i equals </xsl:text>

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

 </xsl:template>

</xsl:stylesheet>

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

 i equals 1

 i equals 2

Использование переменных

Как правило, первой реакцией на известие о том, что переменные в XSLT нельзя изменять является реплика: "Да зачем они вообще тогда нужны?!".

Претензия со стороны процедурного программирования вполне серьезна и обоснованна — изменяемые переменные являются большим подспорьем в сложных многошаговых вычислениях. Тем не менее, переменные, даже в том виде, в каком они присутствуют в XSLT, являются очень важным и полезным элементом языка. Ниже мы перечислим наиболее типичные случаи использования переменных.

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

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

□ Переменные могут использоваться для более прозрачного доступа к внешним документам.

Примеры

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

//a[@href]

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

<xsl:variable name="links" select="//a[@href]"/>

и использовать ее в преобразовании как

$a
. Фильтрующие выражения языка XPath (продукция
FilterExpr
) позволяют затем обращаться к узлам выбранного множества так же, как если бы мы работали с изначальным выражением. Например,
$a[1]
будет эквивалентно
//a[@href][1]
, a
$a/@href
— выражению
//a[@href]/@href
. При этом при обращении к
$a
процессор не будет заново искать все элементы a с атрибутом
href
, что, по всей вероятности, положительно скажется на производительности.

  • Читать дальше
  • 1
  • ...
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: