NaN, которое не равно 1.

При сравнении с использованием операторов '<', '<=', '>' и '>=', оба операнда всегда приводятся к численному типу и сравниваются как числа.

Примеры сравнений с использованием операторов '<', '<=', '>' и '>=':

false () &gt; true() false

В численном виде true() соответствует 1, a false()0, то есть это сравнение равносильно сравнению 0 > 1, результатом которого является 'ложь'.

'0' &lt;= false() true

Это сравнение равносильно сравнению 0 <= 0, результатом его будет 'истина'.

'1' &gt;= '0' true

Это сравнение равносильно сравнению 1 >= 0, результатом его будет 'истина'.

Следует обратить внимание, на то, что символы '<' и '>' заменены сущностями &lt; и &gt; соответственно. В случае символа '<' такая замена необходима, чтобы не нарушать выражениями синтаксис XML-документа. Заменять символ '>' обязательной нужды нет, это делается исключительно из соображений единообразности.

Логические операции

В XSLT имеются две логические операции — or и and. Эти операции бинарны, то есть каждая из них определена для двух операндов. Если операнды не являются булевыми значениями, они неявным образом приводятся к булевому типу.

Семантика or и and очевидна — они соответствуют операциям логического сложения и умножения.

Результатом операции or будет 'истина', если хотя бы один из операндов является 'истиной'. При этом если первый операнд имеет значение true, второй операнд не вычисляется — результат и так будет 'истиной'.

Результатом операции and будет 'истина', если оба операнда истинны. При этом если первый из операндов — 'ложь', то второй операнд не вычисляется — результат и так будет 'ложью'.

Функции

Функции значительно расширяют возможности выражений. Они принимают на вход несколько аргументов и возвращают некоторый результат, который иногда является продуктом весьма замысловатого вычисления.

Функции можно условно разделить на стандартные функции, которые определены в XPath и XSLT и должны поддерживаться (хотя на самом деле поддерживаются далеко не всегда) всеми XSLT-процессорами, и функции расширения, которые могут создаваться разработчиками в дополнение к стандартным функциям.

Контекст вычисления выражений

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

Контекст преобразования состоит из узла, называемого контекстным узлом, двух целых чисел — размера контекста и позиции в контексте, объявлений переменных, объявлений пространств имен и библиотеки функций.

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

Пример

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

<element

 name='имя элемента'

 context-position='позиция в контексте'

 context-size='размер контекста'

 string-value='строковое значение'>

 ...

</element>

Листинг 3.26. Преобразование

<xsl:stylesheet

 version='1.0'

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

 <xsl:output indent='yes'/>

 <xsl:strip-space elements='*'/>

 <xsl:template match='*'>

  <element

   name='{name()}'

   context-position='{position()}'

   context-size='size()'

   string-value='{.}'>

   <xsl:apply-templates select='*'/>

  </element>

 </xsl:template>

</xsl:stylesheet>

Листинг 3.27. Входящий документ

<data>

 <part>

  <item>A</item>

  <item>B</item>

  <item>C</item>

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

0

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

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