<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. Иными словами, эти переменные принадлежат разным пространствам.

Операции с булевыми значениями

XPath поддерживает только две логические операции — and (логическое 'и') и or (логическое 'или'). В XPath нет оператора логического отрицания, вместо него применяется функция not, которая возвращает 'истину', если аргументом была 'ложь' и наоборот.

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

Логические вычисления в XPath абсолютно стандартны. Мы приведем их для справки в табл. 6.2.

Таблица 6.2. Вычисление логических выражений

Значение Выражение
A B A or В A and В
false false false false
false true true false
true false true false
true true true true

Как и во многих других языках, операция 'и' (and) старше операции 'или' (or). Например, такое выражение, как A and B or C and D or E эквивалентно выражению (A and В) or (С and D) or E.

Приведем синтаксические правила продукций логических операций XPath. Операции 'или' соответствует продукция OrExpr, операции 'и' — продукция AndExpr.

[XP21] OrExpr  ::= AndExpr | OrExpr 'or' AndExpr

[XP22] AndExpr ::= EqualityExpr | AndExpr 'and' EqualityExpr

Вы читаете Технология XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

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

Отметить Добавить цитату