Алексей Валиков - Технология XSLT
- Название:Технология XSLT
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2002
- Город:Санкт-Петербург
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Алексей Валиков - Технология XSLT краткое содержание
Книга посвящена разработке приложений для преобразования XML-документов с использованием XSLT — расширяемого языка стилей для преобразований. Обсуждается применение языков XSLT и XPath в решении практических задач: выводу документов в формате HTML, использованию различных кодировок для интернационализации и, в частности, русификации приложений, вопросам эффективности существующих подходов для решения проблем преобразования. Для иллюстрации материала используется большое количество примеров.
Для начинающих и профессиональных программистов
Технология XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Мы можем определить две переменные с одинаковыми локальными частями имен в разных пространствах, используя при определении имени префикс. Естественно, префикс должен быть заранее связан с URI пространства имен.
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:a="uri:a"
xmlns:b="uri:b">
...
В этом преобразовании количество элементов документа, принадлежащих пространству имен а
, будет содержаться в переменной a:elementcount
, а пространству имен b
— в переменной b:elementcount
.
Отсутствие префикса в XPath-выражениях не означает, что следует использовать префикс по умолчанию. Отсутствие префикса означает, что префикс является нулевым со всеми вытекающими последствиями. Например, если шаблон
будет корректен, в шаблоне
процессор не сможет найти объявление переменной $elementcount
, потому что расширенное имя объявленной переменной состоит из URI пространства имен "uri:а"
и локальной части имени elementcount
, а расширенное имя переменной elementcount
состоит из нулевого URI и локальной части elementcount
. Иными словами, эти переменные принадлежат разным пространствам.
Операции с булевыми значениями
XPath поддерживает только две логические операции — and
(логическое "и") и or
(логическое "или"). В XPath нет оператора логического отрицания, вместо него применяется функция not
, которая возвращает "истину", если аргументом была "ложь" и наоборот.
Логические операторы в XPath бинарны, то есть требуют два операнда булевого типа. Если операнды имеют другой тип, то они будут приведены к булевым значениям.
Логические вычисления в XPath абсолютно стандартны. Мы приведем их для справки в табл. 6.2.
Таблица 6.2. Вычисление логических выражений
Значение | Выражение | ||
---|---|---|---|
A |
B |
A or В |
A and В |
false |
false |
false |
false |
false |
true |
true |
false |
true |
false |
true |
false |
true |
true |
true |
true |
Как и во многих других языках, операция "и" ( and
) старше операции "или" ( or
). Например, такое выражение, как A and B or C and D or E
эквивалентно выражению (A and В) or (С and D) or E
.
Приведем синтаксические правила продукций логических операций XPath. Операции "или" соответствует продукция OrExpr
, операции "и" — продукция AndExpr
.
[XP21] OrExpr ::= AndExpr | OrExpr 'or' AndExpr
[XP22] AndExpr ::= EqualityExpr | AndExpr 'and' EqualityExpr
Операции с числами
Перечень арифметических операций в XPath довольно ограничен. К ним относится сложение, вычитание, умножение, деление и унарная операция отрицания, которая меняет значение операнда на противоположное. Кроме того, числа можно сравнивать при помощи операторов сравнения.
Арифметические операции
Арифметические операции XPath сведены в табл. 6.3.
Таблица 6.3. Арифметические операции в XPath-выражениях
Операция | Синтаксис |
---|---|
Сложение | A + B |
Вычитание | A - B |
Умножение | A * B |
Деление | A div B |
Остаток деления | A mod B |
Унарное отрицание | - A |
Если операнды, значения, участвующие в операции, не являются числами, они сначала приводятся к этому типу, а уж затем производится операция. Например, можно легко перемножать литералы:
'2' * '2'
→ 4
Арифметические действия в XPath работают, что называется, "как обычно", то есть совершенно стандартным образом. Арифметика XPath основывается на стандарте IEEE 754, который был использован и в других распространенных языках программирования, например в Java. Пожалуй, следует лишь обратить внимание на операторы деления, поскольку в разных языках они означают разные действия и потому легко запутаться.
Оператор div
делит свой первый операнд на второй. Это не целочисленное деление, как в некоторых других языках, div
осуществляет деление чисел с плавающей точкой. Оператор div
аналогичен оператору деления " /
" в таких языках, как Java, С++ и Pascal.
Примеры:
3.2 div 2.5
→ 1.28
3.2 div -2.5
→ -1.28
-3.2 div -2.5
→ 1.28
Оператор mod
возвращает остаток деления первого своего оператора на второй. Поскольку в разных языках остаток деления вычисляется по-разному, легче всего будет пояснить его функционирование в XPath на примере:
3.2 mod 2
→ 1.2
3.2 mod -2
→ 1.2
-3.2 mod 2
→ -1.2
-3.2 mod -2
→ -1.2
Оператор mod аналогичен оператору " %
" в таких языках, как Java и ECMAScript.
Результат остатка от деления имеет тот же знак, что и делимое. Этот факт можно использовать для того, чтобы выполнять деление без остатка, например число A
можно нацело разделить на число B
выражением (A - (A mod B)) div B
.
Пример:
(3.2 - (3.2 mod 2)) div 2
→ 1
Во избежание ошибок следует аккуратно использовать знак вычитания в арифметических операциях. Дело в том, что синтаксис XML разрешает использовать символ " -
" в именах элементов, которые в свою очередь также могут быть использованы в выражениях в составе путей выборки. Например, A - B
означает разность A
и B
, в то время как A-B
будет воспринято, как имя ' A-B
'. Поэтому рекомендуется выделять знак минуса пробелами.
Приведем продукции выражений с арифметическими операциями.
Унарному отрицанию соответствует продукция UnaryExpr
. Как можно видеть, в текущей версии языка это — единственная унарная операция (то есть операция одного элемента).
[XP27] UnaryExpr ::= UnionExpr | '-' UnaryExpr
Попробуем упростить это правило, раскрыв рекурсию
UnaryExpr ::= '-' * UnionExpr
Таким образом, унарное отрицание можно повторять несколько раз:
------5
→ 5
Умножению, делению и вычислению остатка деления соответствует одна продукция MultiplicativeExpr
:
[XP26] MultiplicativeExpr ::= UnaryExpr
| MultiplicativeExpr MultiplyOperator UnaryExpr
| MultiplicativeExpr 'div' UnaryExpr
| MultiplicativeExpr 'mod' UnaryExpr
Оператор умножения вынесен в отдельное правило:
[XP34] MultiplyOperator ::= '*'
Сложению и вычитанию соответствует правило AdditiveExpr
:
[XP25] AdditiveExpr ::= MultiplicativeExpr
| AdditiveExpr '+' MultiplicativeExpr
| AdditiveExpr '-' MultiplicativeExpr
Операции сравнения
XPath позволяет сравнивать числа при помощи операторов, перечисленных в табл. 6.4.
Таблица 6.4. Операторы сравнения
Оператор | Значение |
---|---|
= |
Равно |
!= |
Не равно |
< |
Меньше |
> |
Больше |
<= |
Меньше или равно (не больше) |
>= |
Больше или равно (не меньше) |
XPath-выражения чаще всего используются в значениях атрибутов, символ " <
" в которых в соответствии с синтаксисом XML использовать нельзя. Поэтому операторы сравнения "меньше" (" <
") и "не больше" (" <=
") нужно записывать с использованием сущностей. Оператор "меньше" может быть записан как " <
;", а оператор "не больше" как " <=
".
Интервал:
Закладка: