not(/)→ false
boolean true()
boolean false()
Две функции trueи falseвозвращают тождественную "истину" и тождественную "ложь" соответственно. В XPath нет констант и, тем более, логических констант, определяющих "истину" и "ложь", как в других языках. Функции trueи falseвосполняют эту нехватку.
Примеры:
true() or $var→ true
Это выражение всегда будет истинным вне зависимости от значения переменной var, поскольку дизъюнкция (логическая операция "или") с тождественной "истиной" всегда будет "истиной".
false() and $var→ false
Это выражение всегда будет ложным вне зависимости от значения переменной var, поскольку конъюнкция (логическая операция "и") с тождественной "ложью" всегда будет "ложью".
boolean lang( string )
Функция langможет использоваться для того, чтобы определить языковой контекст контекстного узла. В элементах XML можно использовать атрибут langпространства имен xmlдля определения языка содержимого узла, например;
Yet no living human being have been ever blessed with seeing...
Пространство имен, соответствующее префиксу xml, не требуется объявлять. Это служебное пространство имен, которое неявно задано во всех XML-документах.
Функция langвозвратит "истину", если идентификатор языка, который передан ей в виде строкового параметра, соответствует языковому контексту контекстного узла. Это определяется следующим образом.
□ Если ни один из предков контекстного узла не имеет атрибута xml:lang, функция возвращает "ложь".
□ Иначе строковый параметр проверяется на соответствие значению атрибута xml:langближайшего предка. Если эти значения равны в любом регистре символов, или атрибут начинается как значение параметра функции и имеет суффикс, начинающийся знаком " -", функция возвращает "истину".
□ В противном случае функция возвращает "ложь".
Примеры:
Функция lang('en')возвратит "истину" в контексте любого из следующих элементов:
Функция lang('de')возвратит "истину" в контексте элемента bи "ложь" — в контексте элементов аи с:
<���а>
number number( object ?)
Функция numberявным образом конвертирует свой аргумент в числовой тип. Если аргумент не указан, функции передается множество узлов, состоящее из единственного контекстного узла. Коротко напомним правила преобразования в числовой тип.
□ Значения булевого типа преобразуются в 0или 1следующим образом: "ложь" преобразуется в 0, "истина" в 1.
□ Строковое значение преобразуется в число, которое оно представляет.
□ Множество узлов сначала преобразуется в строку, а затем, как строка в число. Фактически численным значением множества узлов является численное значение его первого узла.
□ Объекты других типов преобразуются в число в соответствии с собственными правилами. Например, результирующий фрагмент дерева так же как и множество узлов сначала преобразуется к строке, а затем в численный формат.
Примеры
number($to_be or not($to_be))→ 1
Значение этого выражения будет 1, поскольку $to_be or not($to_be)будет истинным вне зависимости от значения переменной to_be.
number(false())→ 0
number('00015.0001000')→ 15.0001
number('.0001000')→ 0.0001
number('1.')→ 1
number('-.1')→ -0.1
number('-5')→ -5
number sum( node-set )
Функция sumсуммирует значения узлов из переданного ей множества. Строковые значения узлов сначала преобразуются в числа, а затем все полученные числа складываются.
Пример
Листинг 6.3. Входящий документ
1
3
5
Листинг 6.4. Преобразование
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
Листинг 6.5. Результат
1
4
9
16
25
В этом преобразовании мы заменяем каждый элемент itemна сумму значений предшествующих ему элементов плюс собственное значение. Предшествующие элементы выбираются путем выборки preceding-sibling::item, текущий элемент — сокращенным путем " .", затем эти два множества объединяются при помощи оператора |, и, наконец, мы вычисляем сумму значений узлов, входящих в них функцией sum.
Читать дальше