boolean()¶
Функция boolean
преобразует переданный ей объект в булевый тип.
Синтаксис¶
1 |
|
Ввод¶
Объект, преобразуемый в логическое значение.
Вывод¶
Логическое значение, соответствующее входному объекту. Объекты преобразуются в логические значения по следующим правилам:
- Число преобразуется в
true
в том и только в том случае, если оно отлично от нуля, отрицательного нуля илиNaN
(«нечисло»). - Набор узлов преобразуется в
true
в том и только в том случае, если он не пуст. - Строка преобразуется в
true
в том и только в том случае, если она имеет положительную длину. - Все остальные типы данных преобразуются по правилам, специфическим для этих типов.
Где определяется¶
XPath 1.0 — XPath, раздел 4.3 «Boolean Functions».
Описание и примеры¶
Функция boolean
преобразует аргумент в булево значение следующим образом:
- число преобразуется в
true
тогда и только тогда, когда оно не является ниNaN
, ни положительным или отрицательным нулем; - набор узлов преобразуется в
true
тогда и только тогда, когда он непустой; - строка преобразуется
true
тогда и только тогда, когда она имеет ненулевую длину; - процедура преобразования в булево значение объекта, не относящегося в четырем основным типам, зависит от типа этого объекта.
Пример 1¶
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Пример 2¶
Для демонстрации работы функции boolean()
используется документ с информацией о продажах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
А вот как выглядит таблица стилей:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
Результат:
1 2 3 4 5 6 7 |
|
В первом тесте в аргументе передается вызов функции true()
, который всегда возвращает true
. Так как полученное значение уже является логическим, функция boolean()
просто возвращает его в исходном виде. Во втором тесте запрашиваются все элементы <true>
в текущем контексте; так как элементы <true>
отсутствуют, результат равен false
. Аргументами третьего и четвертого тестов являются строки с положительной длиной, для которых boolean()
возвращает true
. В пятом тесте передается положительное число, поэтому результат также равен true
.
В последнем примере команда XPath выбирает из отчета все элементы <units>
с числовым значением, большим 20000. Так как команда выбирает по крайней мере один узел, boolean()
возвращает true
. Тест работает в XSLT 1.0, т. к. он генерирует набор узлов, содержащий хотя бы один узел, и в XSLT 2.0, т. к. он создает последовательность, первый объект которой является узлом. Если изменить выражение так, чтобы производился поиск объемов продаж, превышающих 30000, функция boolean()
вернет false
.
Следующая таблица стилей использует правила XSLT 2.0 для обработки различных последовательностей:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|
Результат:
1 2 3 4 5 6 |
|
Проверка состоит из трех тестов. В первом тесте функции boolean()
передается пустая последовательность; результат равен false
. Во втором тесте boolean()
передается синглетное числовое значение; так как оно отлично от нуля, результат равен true
. В последнем тесте аргумент представляет собой последовательность, содержащую пять узлов <unit>
, за которыми следуют три числовых значения. Поскольку первый объект последовательности является узлом, boolean()
возвращает true
.
Если в этой таблице стилей определить $testSequence1
так, чтобы последовательность содержала более одного объекта, таблица не будет компилироваться. Любая последовательность, передаваемая boolean()
, должна быть синглетом или последовательностью, первое значение в которой является узлом. Во вторую последовательность $testSequence2
можно включить сколько угодно объектов разных типов при условии, что первый объект является узлом. Если ни один узел не соответствует выражению /report/brand/units
, первым узлом последовательности станет атомарное значение 3
, и процессор XSLT выдаст ошибку времени выполнения.