□ .5 = '0.5'→ true
Это равенство также будет верным, поскольку результатом преобразования строки " 0.5" в число будет также 0.5.
□ 1 != 'two'→ true
Результатом преобразования строки " two" в численный тип будет значение NaN, которое не равно 1.
При сравнении с использованием операторов " <", " <=", " >" и " >=", оба операнда всегда приводятся к численному типу и сравниваются как числа.
Примеры сравнений с использованием операторов " <", " <=", " >" и " >=":
false () > true()→ false
В численном виде true()соответствует 1, a false()— 0, то есть это сравнение равносильно сравнению 0 > 1, результатом которого является "ложь".
'0' <= false()→ true
Это сравнение равносильно сравнению 0 <= 0, результатом его будет "истина".
'1' >= '0'→ true
Это сравнение равносильно сравнению 1 >= 0, результатом его будет "истина".
Следует обратить внимание, на то, что символы " <" и " >" заменены сущностями <и >соответственно. В случае символа " <" такая замена необходима, чтобы не нарушать выражениями синтаксис XML-документа. Заменять символ " >" обязательной нужды нет, это делается исключительно из соображений единообразности.
В XSLT имеются две логические операции — orи and. Эти операции бинарны, то есть каждая из них определена для двух операндов. Если операнды не являются булевыми значениями, они неявным образом приводятся к булевому типу.
Семантика orи andочевидна — они соответствуют операциям логического сложения и умножения.
Результатом операции orбудет "истина", если хотя бы один из операндов является "истиной". При этом если первый операнд имеет значение true, второй операнд не вычисляется — результат и так будет "истиной".
Результатом операции andбудет "истина", если оба операнда истинны. При этом если первый из операндов — "ложь", то второй операнд не вычисляется — результат и так будет "ложью".
Функции значительно расширяют возможности выражений. Они принимают на вход несколько аргументов и возвращают некоторый результат, который иногда является продуктом весьма замысловатого вычисления.
Функции можно условно разделить на стандартные функции , которые определены в XPath и XSLT и должны поддерживаться (хотя на самом деле поддерживаются далеко не всегда) всеми XSLT-процессорами, и функции расширения , которые могут создаваться разработчиками в дополнение к стандартным функциям.
Контекст вычисления выражений
Выражения всегда вычисляются в некотором контексте — окружении, которое зависит от того, какая часть документа обрабатывается XSLT-процессором в данный момент, и какие объявления присутствовали в самом преобразовании.
Контекст преобразования состоит из узла, называемого контекстным узлом, двух целых чисел — размера контекста и позиции в контексте, объявлений переменных, объявлений пространств имен и библиотеки функций.
Контекст самым непосредственным образом влияет на вычисление выражений. Относительные пути выборки отсчитываются от контекстного узла, вычисление многих функций также производится в зависимости от контекста. Кроме того, в выражениях нельзя использовать функции, пространства имен и переменные, не присутствующие в контексте.
Пример
Для того чтобы показать, как изменяется контекст во время преобразования, мы напишем шаблон, который заменяет все элементы входящего документа элементами вида:
name="имя элемента"
context-position="позиция в контексте"
context-size="размер контекста"
string-value="строковое значение">
...
Листинг 3.26. Преобразование
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
name="{name()}"
context-position="{position()}"
context-size="size()"
string-value="{.}">
Листинг 3.27. Входящий документ
A
B
C
D
E
F
Листинг 3.28. Выходящий документ
context-position="1" context-size="1" string-value="ABCDEF">
context-position="1" context-size="2" string-value="ABC">
context-position="1" context-size="3" string-value="A"/>
context-position="2" context-size="3" string-value="B"/>
Читать дальше