В этом примере я передаю
number
строку:
number("456.7")
Это выражение возвращает число 456.7. Если вы попытаетесь преобразовать что-то, что
number
не сможет перевести в число, функция вернет значение XPath
NaN
(Not a Number, не число).
NaN
— корректное значение, которое можно проверять в выражениях Xpath.
Функция
round
округляет переданное ей значение.
Функция применяется следующим образом:
number round(number)
Например,
round(3.1415926535)
возвращает 3,
round(4.5)
возвращает 5 и
round(-1.5)
возвращает -1.
Функция
sum
суммирует численные значения набора узлов и возвращает результат. Функция применяется следующим образом:
number sum(node-set)
Взгляните на следующий пример из главы 4, который находит средние массы планет в
planets.xml
:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:template match="PLANETS">
<HTML>
<BODY>
The average planetary mass is
<xsl:value-of select="sum(child::PLANET/child::MASS) div count(child::PLANET/child::MASS)"/>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
XPath также поддерживает следующий набор логических функций:
•
boolean
. Приводит аргумент к логическому значению;
•
false
. Возвращает false (ложь);
•
lang
. Проверяет, совпадает ли язык, установленный в атрибуте
xml:lang
, с языком, переданным в функцию;
•
not
. Инвертирует значение true\false аргумента;
•
true
. Возвращает true (истина).
Функция
boolean
преобразует аргумент в логическое значение. Функция применяется следующим образом:
boolean boolean(object)
Ниже показано, как функция работает с различными типами XPath:
•
number
. Если число равно нулю, результатом будет ложь; иначе результат — истина. NaN всегда возвращает ложь;
•
string
. Если строка не пуста, результат — истина, иначе — ложь;
•
boolean
. Значение не изменяется;
•
nodeset
. Пустой набор узлов дает ложь,
не пустой — истину;
• Фрагмент результирующего дерева в XSLT 1.0 всегда дает истину.
Функция
false
возвращает ложь. Она применяется следующим образом:
boolean false
В XPath не определены логические константы, поэтому для того чтобы присвоить переменной значение false, нужно прибегнуть к функции
false
. (С переменными вы познакомитесь в главе 9.)
Функция
lang
проверяет, совпадает ли язык контекстного узла (определенный в атрибуте
xml:lang
) с переданным ей языком. Функция применяется следующим образом:
boolean lang(string)
Функции нужно передать строку, определяющую язык в спецификации XML, как, например, «en» для английского, «de» для немецкого и «jp» для японского.
В следующем примере я проверяю, написан ли исходный документ на английском. Сначала я устанавливаю атрибут
xml:lang
в
planets.xml
в значение, соответствующее английскому языку:
<?xml version="1.0"?>
<?xml=stylesheet type="text/xml" href="#"?>
<PLANETS xml:lang="en">
<PLANET>
<NAME>Mercury</NAME>
<MASS UNITS="(Earth = 1)">.0553</MASS>
<DAY UNITS="days">58.65</DAY>
<RADIUS UNITS="miles">1516</RADIUS>
<DENSITY UNITS="(Earth = 1)">.983</DENSITY>
<DISTANCE UNITS="million miles">43.4</DISTANCE><!--B перигелии-->
</PLANET>
.
.
.
Теперь я удостоверяюсь, что исходный документ на самом деле написан на английском, перед тем как применять к нему шаблоны:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/PLANETS">
<xsl:if test="lang('en')">
<HTML>
<HEAD>
<TITLE>
The Planets Table
</TITLE>
</HEAD>
<BODY>
<H1>
The Planets Table
</H1>