Книга: Технология XSLT
Переменные
Переменные
Переменные вызываются в выражениях XPath по своему имени, которому предшествует символ "$
". Например, если мы объявили переменную nodes
:
<xsl:variable name="nodes" select="a/b"/>
то использовать в выражениях мы ее будем как $nodes
.
Переменные, так же как элементы и атрибуты XML, могут иметь расширенные имена вида QName
, состоящие из префикса пространства имен и локальной части имени. Это позволяет создавать переменные, принадлежащие различным пространствам имен.
Пример
Мы можем определить две переменные с одинаковыми локальными частями имен в разных пространствах, используя при определении имени префикс. Естественно, префикс должен быть заранее связан с URI пространства имен.
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:a="uri:a"
xmlns:b="uri:b">
<xsl:variable name="a:elementcount" select="count(//a:*)"/>
<xsl:variable name="b:elementcount" select="count(//b:*)"/>
...
</xsl:stylesheet>
В этом преобразовании количество элементов документа, принадлежащих пространству имен а
, будет содержаться в переменной a:elementcount
, а пространству имен b — в переменной b:elementcount
.
Отсутствие префикса в XPath-выражениях не означает, что следует использовать префикс по умолчанию. Отсутствие префикса означает, что префикс является нулевым со всеми вытекающими последствиями. Например, если шаблон
<xsl:template match="counts">
<xsl:value-of select="$a:elementcount"/>
<xsl:text>
</xsl:text>
<xsl:value-of select="$b:elementcount"/>
</xsl:template>
будет корректен, в шаблоне
<xsl:template match="counts" xmlns="uri:a">
<xsl:value-of select="$elementcount"/>
<xsl:text>
</xsl:text>
<xsl:value-of select="$b:elementcount"/>
</xsl:template>
процессор не сможет найти объявление переменной $elementcount
, потому что расширенное имя объявленной переменной состоит из URI пространства имен "uri:а"
и локальной части имени elementcount
, а расширенное имя переменной elementcount
состоит из нулевого URI и локальной части elementcount
. Иными словами, эти переменные принадлежат разным пространствам.
- Системные переменные ROWS_AFFECTED, GDSCODE, SQLCODE, TRANSACTIONJD, CONNECTIONJD
- 1.2.3. Константы, переменные и типы
- 22.3.3. Переменные окружения
- 8.3 Этап 3: переменные с произвольными именами; встроенные функции
- Контекстные переменные даты и времени
- 13.2.4. Условные переменные
- 15.4.2.1. Добавляйте отладочные опции и переменные
- Глава 2 Аргументы, опции и переменные окружения
- 2.4. Переменные окружения
- 1.3. Переменные
- 13.2.1. Категории локалей и переменные окружения
- 15.4.2.2. Используйте специальные переменные окружения