Функция round
округляет переданное ей значение. Функция применяется следующим образом:
number round(number)
Например, round(3.1415926535)
возвращает 3, round(4.5)
возвращает 5 и round(-1.5)
возвращает -1.
sum()
Функция 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
XPath также поддерживает следующий набор логических функций:
• boolean()
. Приводит аргумент к логическому значению;
• false()
. Возвращает false (ложь);
• lang()
. Проверяет, совпадает ли язык, установленный в атрибуте xml:lang
, с языком, переданным в функцию;
• not()
. Инвертирует значение truefalse аргумента;
• 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
в значение, соответствующее английскому языку:
<?xml version='1.0'?>
<?xml=stylesheet type='text/xml' href='planets.xsl'?>
<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>
.
.
.
Теперь я удостоверяюсь, что исходный документ на самом деле написан на английском, перед тем как применять к нему шаблоны: