Книга: Технология 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>&#xA;</xsl:text>
 <xsl:value-of select="$b:elementcount"/>
</xsl:template>

будет корректен, в шаблоне

<xsl:template match="counts" xmlns="uri:a">
 <xsl:value-of select="$elementcount"/>
 <xsl:text>&#xA;</xsl:text>
 <xsl:value-of select="$b:elementcount"/>
</xsl:template>

процессор не сможет найти объявление переменной $elementcount, потому что расширенное имя объявленной переменной состоит из URI пространства имен "uri:а" и локальной части имени elementcount, а расширенное имя переменной elementcount состоит из нулевого URI и локальной части elementcount. Иными словами, эти переменные принадлежат разным пространствам.

Оглавление книги


Генерация: 0.037. Запросов К БД/Cache: 0 / 2
поделиться
Вверх Вниз