• - вычитание;

• * умножение;

• div деление (символ /, соответствующий делению в других языках, в XML, XSL и XPath уже занят);

• mod возвращает значение деления по модулю двух чисел (остаток после деления первого числа на второе).

Например, элемент <xsl:value-of select='180+420'/> вставит в выходной документ строку '600'. В следующем примере выбираются все планеты, у которых отношение дня (измеренного в днях Земли) к массе (где масса Земли принята за 1) больше 100:

<xsl:template match='PLANETS'>

 <HTML>

  <BODY>

   <xsl:apply-templates select='PLANET[DAY div MASS > 100]'/>

  </BODY>

 </HTML>

</xsl:template>

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

• ceiling(). Возвращает наименьшее целое, большее, чем переданное функции число;

• floor(). Возвращает наибольшее целое, меньшее, чем переданное функции число;

• round(). Округляет переданное число до ближайшего целого;

• sum(). Возвращает сумму переданных функции чисел.

Например, среднюю массу планет в planets.xml можно найти так, как в листинге 4.8:

Листинг 4.8. Вычисление средней массы планет

<?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)'/>

   </BODY>

  </HTML>

 </xsl:template>

</xsl:stylesheet>

Строки

В XPath строки формируются из символов Unicode, как можно было предположить. Ряд функций специально предназначен для работы со строками:

• string(object object1). Преобразует объект в строку;

• starts-with(string string1, string string2). Возвращает истину, если первая строка начинается (starts with) со второй строки;

• contains(string string1, string string2). Возвращает истину, если первая строка содержит (contains) вторую строку;

• substring(string string1, number offset number length). Возвращает length символов из строки, начиная со смещения offset;

• substring-before(string string1, string string2). Возвращает часть строки string1 до первого вхождения строки string2;

• substring-after(string string1, string string2). Возвращает часть строки string1 после первого вхождения string2;

• string-length(string string1). Возвращает количество символов в строке string1;

• normalize-space(string string1). Возвращает строку string1 после отбрасывания лидирующих и завершающих символов-разделителей и замены нескольких последовательных разделителей на один пробел;

• translate(string string1, string string2, string string3). Возвращает строку string1, в которой все вхождения символов в строке string2 заменены на соответствующие символы в строке string3;

• concat(string string1, string string2, ...). Возвращает конкатенацию (объединение) всех строк.

Есть еще одна строковая функция, о которой вам следует знать, входящая не в XPath, а в XSLT:

• format-number(number number1, string string2, string string3). Возвращает строку, содержащую число number1 в виде форматированной строки, используя string2 в качестве форматирующей строки (форматирующие строки создаются так же, как для метода Java java.text.DecimalFormat) и string3 как возможную строку локализации.

В листинге 4.9 я выбираю текстовые узлы, в которых текст начинается с 'Е', чтобы выбрать Earth (Земля), и добавляю текст '(the World)' (мир), получая 'Earth (the World)'. Для этого я применяю предикат 'text()[starts-with(., 'Е')]'.

Листинг 4.9. Применение функции starts-with

<?xml version='1.0'?>

<xsl:stylesheet version='1.0'

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

 <xsl:template match='/PLANETS'>

  <HTML>

   <HEAD>

    .

    .

    .

   </BODY>

  </HTML>

 </xsl:template>

 <xsl:template match='PLANET'>

  <TR>

   <TD><xsl:apply-templates select='NAME'/></TD>

   <TD><xsl:apply-templates select='MASS'/></TD>

   <TD><xsl:apply-templates select='RADIUS'/></TD>

   <TD><xsl:apply-templates select='DAY'/></ТD>

  </TR>

 </xsl:template>

Вы читаете XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату