Чтение онлайн

ЖАНРЫ

Холзнер Стивен

Шрифт:

В этом примере я передаю

number
строку:

number("456.7")

Это выражение возвращает число 456.7. Если вы попытаетесь преобразовать что-то, что

number
не сможет перевести в число, функция вернет значение XPath
NaN
(Not a Number, не число).
NaN
— корректное значение, которое можно проверять в выражениях Xpath.

round

Функция

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
. Инвертирует значение 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
в значение, соответствующее английскому языку:

<?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>

<TABLE BORDER="2">

<TR>

<TD>Name</TD>

<TD>Mass</TD>

<TD>Radius</TD>

<TD>Day</TD>

</TR>

<xsl:apply-templates/>

</TABLE>

</BODY>

</HTML>

Поделиться с друзьями: