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 выдаст ошибку времени выполнения.