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

на главную - закладки

Жанры

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

Шрифт:

Функция

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"

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

 <xsl:template match="/PLANETS">

<HTML>

.

.

.

</HTML>

 </xsl:template>

 <xsl:template match="PLANET">

<TR>

Поделиться:
Популярные книги

Око василиска

Кас Маркус
2. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Око василиска

Ангел тьмы

Шелдон Сидни
Детективы:
полицейские детективы
8.33
рейтинг книги
Ангел тьмы

Лекарь Империи 15

Карелин Сергей Витальевич
15. Лекарь Империи
Фантастика:
городское фэнтези
аниме
фэнтези
попаданцы
6.80
рейтинг книги
Лекарь Империи 15

Изгои

Владимиров Денис
5. Глэрд
Фантастика:
фэнтези
боевая фантастика
5.00
рейтинг книги
Изгои

Бестужев. Служба Государевой Безопасности. Книга третья

Измайлов Сергей
3. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности. Книга третья

Я до сих пор князь. Книга XXII

Дрейк Сириус
22. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я до сих пор князь. Книга XXII

Вечная Война. Книга II

Винокуров Юрий
2. Вечная война.
Фантастика:
юмористическая фантастика
космическая фантастика
8.37
рейтинг книги
Вечная Война. Книга II

Проводник

Кораблев Родион
2. Другая сторона
Фантастика:
боевая фантастика
рпг
7.41
рейтинг книги
Проводник

Убивать чтобы жить 7

Бор Жорж
7. УЧЖ
Фантастика:
героическая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 7

Старый, но крепкий 7

Крынов Макс
7. Культивация без насилия
Фантастика:
рпг
уся
фэнтези
5.00
рейтинг книги
Старый, но крепкий 7

Князь Андер Арес 4

Грехов Тимофей
4. Андер Арес
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Князь Андер Арес 4

Лишённые плоти

Макдермид Вэл
6. Тони Хилл и Кэрол Джордан
Детективы:
маньяки
7.71
рейтинг книги
Лишённые плоти

Зауряд-врач

Дроздов Анатолий Федорович
1. Зауряд-врач
Фантастика:
альтернативная история
8.64
рейтинг книги
Зауряд-врач

Силуэты

Полевой Борис Николаевич
Проза:
советская классическая проза
6.25
рейтинг книги
Силуэты