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
.
Читать дальше