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

на главную

Жанры

Технология XSLT

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

Шрифт:

'0' <= false
true

Это сравнение равносильно сравнению

0 <= 0
, результатом его будет "истина".

'1' &gt;= '0'
true

Это сравнение равносильно сравнению

1 >= 0
, результатом его будет "истина".

Следует обратить внимание, на то, что символы "

<
" и "
>
" заменены сущностями
&lt;
и
&gt;
соответственно.
В случае символа "
<
" такая замена необходима, чтобы не нарушать выражениями синтаксис XML-документа. Заменять символ "
>
" обязательной нужды нет, это делается исключительно из соображений единообразности.

Логические операции

В XSLT имеются две логические операции —

or
и
and
. Эти операции бинарны, то есть каждая из них определена для двух операндов. Если операнды не являются булевыми значениями, они неявным образом приводятся к булевому типу.

Семантика

or
и
and
очевидна — они соответствуют операциям логического сложения и умножения.

Результатом операции

or
будет "истина", если хотя бы один из операндов является "истиной". При этом если первый операнд имеет значение
true
, второй операнд не вычисляется — результат и так будет "истиной".

Результатом операции

and
будет "истина", если оба операнда истинны. При этом если первый из операндов — "ложь", то второй операнд не вычисляется — результат и так будет "ложью".

Функции

Функции значительно расширяют возможности выражений. Они принимают на вход несколько аргументов и возвращают некоторый результат, который иногда является продуктом весьма замысловатого вычисления.

Функции можно условно разделить на стандартные функции, которые определены в XPath и XSLT и должны поддерживаться (хотя на самом деле поддерживаются далеко не всегда) всеми XSLT-процессорами, и функции расширения, которые могут создаваться разработчиками в дополнение к стандартным функциям.

Контекст вычисления выражений

Выражения всегда вычисляются в некотором контексте — окружении, которое зависит от того, какая часть документа обрабатывается XSLT-процессором в данный момент, и какие объявления присутствовали в самом преобразовании.

Контекст преобразования состоит из узла, называемого контекстным узлом, двух целых чисел — размера контекста и позиции в контексте, объявлений переменных, объявлений пространств имен и библиотеки функций.

Контекст самым непосредственным образом влияет на вычисление выражений. Относительные пути выборки отсчитываются от контекстного узла, вычисление многих функций также производится в зависимости от контекста. Кроме того, в выражениях нельзя использовать функции, пространства имен и переменные, не присутствующие в контексте.

Пример

Для того чтобы показать, как изменяется контекст во время преобразования, мы напишем шаблон, который заменяет все элементы входящего документа элементами вида:

<element

 name="имя
элемента"

 context-position="позиция в контексте"

 context-size="размер контекста"

 string-value="строковое значение">

 ...

</element>

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

<xsl:stylesheet

 version="1.0"

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

 <xsl:output indent="yes"/>

 <xsl:strip-space elements="*"/>

 <xsl:template match="*">

<element

name="{name}"

context-position="{position}"

context-size="size"

string-value="{.}">

<xsl:apply-templates select="*"/>

</element>

 </xsl:template>

</xsl:stylesheet>

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

<data>

 <part>

<item>A</item>

<item>B</item>

<item>C</item>

 </part>

 <part>

<value>D</value>

<value>E</value>

<value>F</value>

 </part>

</data>

Листинг 3.28. Выходящий документ

<element name="data"

 context-position="1" context-size="1" string-value="ABCDEF">

 <element name="part"

context-position="1" context-size="2" string-value="ABC">

 <element name="item"

context-position="1" context-size="3" string-value="A"/>

 <element name="item"

context-position="2" context-size="3" string-value="B"/>

 <element name="item"

context-position="3" context-size="3" string-value="C"/> </element>

 <element name="part"

context-position="2" context-size="2" string-value="DEF">

 <element name="value"

context-position="1" context-size="3" string-value="D"/>

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

Ведьма

Резник Юлия
Любовные романы:
современные любовные романы
эро литература
8.54
рейтинг книги
Ведьма

Комбинация

Ланцов Михаил Алексеевич
2. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Комбинация

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

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

Большая игра

Ланцов Михаил Алексеевич
4. Иван Московский
Фантастика:
альтернативная история
5.00
рейтинг книги
Большая игра

Хозяйка Междуречья

Алеева Елена
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Хозяйка Междуречья

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

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

Восьмое правило дворянина

Герда Александр
8. Истинный дворянин
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восьмое правило дворянина

Идеальный мир для Лекаря 6

Сапфир Олег
6. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 6

Жена моего брата

Рам Янка
1. Черкасовы-Ольховские
Любовные романы:
современные любовные романы
6.25
рейтинг книги
Жена моего брата

Генерал Империи

Ланцов Михаил Алексеевич
4. Безумный Макс
Фантастика:
альтернативная история
5.62
рейтинг книги
Генерал Империи

Купеческая дочь замуж не желает

Шах Ольга
Фантастика:
фэнтези
6.89
рейтинг книги
Купеческая дочь замуж не желает

Академия

Сай Ярослав
2. Медорфенов
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Академия

Светлая ведьма для Темного ректора

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

Хроники разрушителя миров. Книга 8

Ермоленков Алексей
8. Хроники разрушителя миров
Фантастика:
фэнтези
5.00
рейтинг книги
Хроники разрушителя миров. Книга 8