Чтение онлайн

на главную - закладки

Жанры

Технология XSLT

Валиков Алексей Н.

Шрифт:

□ Если ни один из предков контекстного узла не имеет атрибута

xml:lang
, функция возвращает "ложь".

□ Иначе строковый параметр проверяется на соответствие значению атрибута

xml:lang
ближайшего предка. Если эти значения равны в любом регистре символов, или атрибут начинается как значение параметра функции и имеет суффикс, начинающийся знаком "
", функция возвращает "истину".

□ В противном случае функция возвращает "ложь".

Примеры:

Функция

lang('en')
возвратит "истину" в контексте любого из следующих
элементов:

<body xml:lang="EN"/>

<body xml:lang="en-GB"/>

<body xml:lang="en-us"/>

<body xml:lang="EN-US"/>

Функция

lang('de')
возвратит "истину" в контексте элемента
b
и "ложь" — в контексте элементов
а
и
с
:

<а>

 <b xml:lang="de">

<c xml:lang="en"/>

 </b>

</a>

Числовые функции

Функция number

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

Функция sum

number sum(node-set)

Функция

sum
суммирует значения узлов из переданного ей множества. Строковые значения узлов сначала преобразуются в числа, а затем все полученные числа складываются.

Пример
Листинг 6.3. Входящий документ

<list>

 <item>1</item>

 <item>3</item>

 <item>5</item>

</list>

Листинг 6.4. Преобразование

<xsl:stylesheet

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

 version="1.0">

 <xsl:template match="list">

<xsl:copy>

<xsl:apply-templates/>

</xsl:copy>

 </xsl:template>

 <xsl:template match="item">

<sum>

<xsl:value-of select="sum(preceding-sibling::item|.)"/>

</sum>

 </xsl:template>

</xsl:stylesheet>

Листинг 6.5. Результат

<list>

 <sum>1</sum>

 <sum>4</sum>

 <sum>9</sum>

 <sum>16</sum>

 <sum>25</sum>

</list>

В этом преобразовании мы заменяем каждый элемент

item
на сумму значений предшествующих ему элементов плюс собственное значение. Предшествующие элементы выбираются путем выборки
preceding-sibling::item
, текущий элемент — сокращенным путем "
.
", затем эти два множества объединяются при помощи оператора
|
, и, наконец, мы вычисляем сумму значений узлов, входящих в них функцией
sum
.

Строковые значения суммируемых узлов преобразовываются в числовой формат так же, как они преобразовывались бы функцией

number
. Например, если входящий документ будет иметь вид

<list>

 <item>1</item>

 <item>3</item>

 <item>five</item>

 <item>7</item>

 <item>9</item>

</list>

Поделиться:
Популярные книги

Девочка-лед

Джолос Анна
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Девочка-лед

Держать удар

Иванов Дмитрий
11. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Держать удар

Возвышение Меркурия. Книга 4

Кронос Александр
4. Меркурий
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Возвышение Меркурия. Книга 4

Предатель. Цена ошибки

Кучер Ая
Измена
Любовные романы:
современные любовные романы
5.75
рейтинг книги
Предатель. Цена ошибки

Брак по принуждению

Кроу Лана
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Брак по принуждению

Стеллар. Заклинатель

Прокофьев Роман Юрьевич
3. Стеллар
Фантастика:
боевая фантастика
8.40
рейтинг книги
Стеллар. Заклинатель

Вернуть невесту. Ловушка для попаданки 2

Ардова Алиса
2. Вернуть невесту
Любовные романы:
любовно-фантастические романы
7.88
рейтинг книги
Вернуть невесту. Ловушка для попаданки 2

Мое ускорение

Иванов Дмитрий
5. Девяностые
Фантастика:
попаданцы
альтернативная история
6.33
рейтинг книги
Мое ускорение

Чужая дочь

Зика Натаэль
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Чужая дочь

Страж Кодекса. Книга V

Романов Илья Николаевич
5. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга V

Неудержимый. Книга XII

Боярский Андрей
12. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XII

Попаданка в Измену или замуж за дракона

Жарова Анита
Любовные романы:
любовно-фантастические романы
6.25
рейтинг книги
Попаданка в Измену или замуж за дракона

Измена. Верни мне мою жизнь

Томченко Анна
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Верни мне мою жизнь

Титан империи

Артемов Александр Александрович
1. Титан Империи
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Титан империи