XSLT — страница 72 из 124

XPath также поддерживает следующий набор логических функций:

• 

boolean()
. Приводит аргумент к логическому значению;

• 

false()
. Возвращает false (ложь);

• 

lang()
. Проверяет, совпадает ли язык, установленный в атрибуте
xml:lang
, с языком, переданным в функцию;

• 

not()
. Инвертирует значение true\false аргумента;

• 

true()
. Возвращает true (истина).

boolean()

Функция

boolean
преобразует аргумент в логическое значение. Функция применяется следующим образом:

boolean boolean(object)

Ниже показано, как функция работает с различными типами XPath:

• 

number
. Если число равно нулю, результатом будет ложь; иначе результат — истина. NaN всегда возвращает ложь;

• 

string
. Если строка не пуста, результат — истина, иначе — ложь;

• 

boolean
. Значение не изменяется;

• 

nodeset
. Пустой набор узлов дает ложь, не пустой — истину;

• Фрагмент результирующего дерева в XSLT 1.0 всегда дает истину.

false()

Функция

false
возвращает ложь. Она применяется следующим образом:

boolean false()

В XPath не определены логические константы, поэтому для того чтобы присвоить переменной значение false, нужно прибегнуть к функции

false
. (С переменными вы познакомитесь в главе 9.)

lang() 

Функция

lang
проверяет, совпадает ли язык контекстного узла (определенный в атрибуте
xml:lang
) с переданным ей языком. Функция применяется следующим образом:

boolean lang(string)

Функции нужно передать строку, определяющую язык в спецификации XML, как, например, «en» для английского, «de» для немецкого и «jp» для японского.

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

xml:lang
в
planets.xml
в значение, соответствующее английскому языку:

Mercury

.0553

58.65

1516

.983

43.4

 .

 .

 .

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

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

</code></pre></p><p><pre><code>      The Planets Table</code></pre></p><p><pre><code>

      The Planets Table

NameMassRadiusDay


not()

Функция

not
инвертирует логическое значение аргумента. При передаче аргумента с логическим значением true она возвращает false; при передаче аргумента со значением false функция возвращает true. Функция применяется следующим образом:

boolean not(boolean)

В следующем примере, который вы уже видели в главе 4, я хочу выбрать только те элементы, у которых есть оба атрибута —

COLOR
и
POPULATED
. Для этого я применяю предикат выбора «
[@COLOR and (@POPULATED]
». Для того, чтобы убрать другие элементы (чтобы правила по умолчанию не включали их текст в результирующий документ), я использую предикат «
[not(@COLOR) or not(@POPULATED)]
»:

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

   .

   .

   .






Вот результат:

</code></pre></p><p><pre><code>   Colorful, Populated Planets</code></pre></p><p><pre><code>

   Colorful, Populated Planets

NameMassRadiusDay
Earth1 (Earth = 1)2107 miles1 days

true()

Функция

true
возвращает значение true. Она применяется следующим образом:

boolean true()

В XPath не определены логические константы, поэтому для того чтобы присвоить переменной значение true, нужно прибегнуть к функции

true
. (С переменными вы познакомитесь в главе 9.)

Элемент