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