Kniga-Online.club

Алексей Валиков - Технология XSLT

Читать бесплатно Алексей Валиков - Технология XSLT. Жанр: Программирование издательство -, год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

<xsl:stylesheet

 version="1.0"

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

 xmlns:a="uri:a"

 xmlns:b="uri:b">

 <xsl:variable name="a:elementcount" select="count(//a:*)"/>

 <xsl:variable name="b:elementcount" select="count(//b:*)"/>

 ...

</xsl:stylesheet>

В этом преобразовании количество элементов документа, принадлежащих пространству имен а, будет содержаться в переменной a:elementcount, а пространству имен b — в переменной b:elementcount.

Отсутствие префикса в XPath-выражениях не означает, что следует использовать префикс по умолчанию. Отсутствие префикса означает, что префикс является нулевым со всеми вытекающими последствиями. Например, если шаблон

<xsl:template match="counts">

 <xsl:value-of select="$a:elementcount"/>

 <xsl:text>&#xA;</xsl:text>

 <xsl:value-of select="$b:elementcount"/>

</xsl:template>

будет корректен, в шаблоне

<xsl:template match="counts" xmlns="uri:a">

 <xsl:value-of select="$elementcount"/>

 <xsl:text>&#xA;</xsl:text>

 <xsl:value-of select="$b:elementcount"/>

</xsl:template>

процессор не сможет найти объявление переменной $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 использовать нельзя. Поэтому операторы сравнения "меньше" ("<") и "не больше" ("<=") нужно записывать с использованием сущностей. Оператор "меньше" может быть записан как "&lt;", а оператор "не больше" как "&lt;=".

Перейти на страницу:

Алексей Валиков читать все книги автора по порядку

Алексей Валиков - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


Технология XSLT отзывы

Отзывы читателей о книге Технология XSLT, автор: Алексей Валиков. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*