.

 .

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

<?xml version='1.0' encoding='UTF-8'?>

http://starpowder.com

position()

Функция position возвращает позицию контекстного узла:

number position()

С этой функцией мы встречались на протяжении всей книги. Такой пример вы уже видели раньше в этой главе, в нем для создания предложения «The first three planets are: Mercury, Venus, and Earth.» используются функции last и position:

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

  <DOCUMENT>

   <TITLE>

    The Planets

   </TITLE>

   <PLANETS>

    The first three planets are:

    <xsl:apply-templates select='PLANET'/>

   </PLANETS>

  </DOCUMENT>

 </xsl:template>

 <xsl:template match='PLANET'>

  <xsl:value-of select='NAME'/>

  <xsl:if test='position()!=last()'>, </xsl:if>

  <xsl:if test='position()=last()-1'>and </xsl:if>

  <xsl:if test='position()=last()'>.</xsl:if>

 </xsl:template>

</xsl:stylesheet>

Полученный результат:

<?xml:version='1.0' encoding='UTF-8'?>

<DOCUMENT>

 <TITLE>

  The Planets

 </TITLE>

 <PLANETS>

  The first three planets are: Mercury, Venus, and Earth.

 </PLANETS>

</DOCUMENT>

Функции XPath для работы со строками

В XSLT доступны следующие функции XPath для работы со строками:

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

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

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

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

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

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

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

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

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

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

В последующих разделах я рассмотрю каждую из этих функций.

concat()

Функция concat объединяет вместе все переданные ей строки и возвращает полученную строку:

concat(string string1, string string2, ...)

В качестве примера рассмотрите разработанный ранее вариант таблицы стилей planets.xsl, отображающей значения элементов и значения атрибутов UNITS, в котором шаблоны применяются следующим образом:

<xsl:template match='MASS'>

 <xsl:value-of select='.'/>

 <xsl:text> </xsl:text>

 <xsl:value-of select='@UNITS'/>

</xsl:template>

Такой код отображает строковое значение, контекстный узел, пробел и строковое значение атрибута UNITS. Но код можно значительно сократить при помощи функции concat (листинг 8.8).

Листинг 8.8. Применение функции concat

<?xml version='1.0'?>

<xsl:stylesheet version='1.0'

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

0

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

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