,
and
.
Полученный результат:
The Planets
The first three planets are: Mercury, Venus, and Earth.
Функции 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(string string1, string string2, ...)
В качестве примера рассмотрите разработанный ранее вариант таблицы стилей planets.xsl
, отображающей значения элементов и значения атрибутов UNITS
, в котором шаблоны применяются следующим образом:
Такой код отображает строковое значение, контекстный узел, пробел и строковое значение атрибута UNITS. Но код можно значительно сократить при помощи функции concat
(листинг 8.8).
Листинг 8.8. Применение функции concat
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
.
.
.
|
|
|
|
Функция contains
проверяет, содержится ли одна строка внутри другой; если это так, функция возвращает истину, если нет — ложь. Функция применяется следующим образом:
boolean contains(container-string, contained-string)
Следующий пример взят из главы 7; в этом случае я хочу осуществить поиск слова «miles» во всех атрибутах, и если оно будет найдено, добавить в результирующий документ текст «You should switch to kilometers.» (Нужно перевести в километры.):
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
.
.
.
|
|
|
|
|
.
.
.
You should switch to kilometers.
Вот результирующий документ:
The Planets Table
The Planets Table
Name |
Mass |
Radius |
Day |
Distance |
Mercury |
.0553 (Earth = 1) |
1516 You should switch to kilometers. |
58.65 days |
43.4 You should switch to kilometers. |
Venus |
.815 (Earth = 1) |
3716 You should switch to kilometers. |
116.75 days |
66.8 You should switch to kilometers. |
Earth |
1 (Earth = 1) |
2107 You should switch to kilometers. |
1 days |
128.4 You should switch to kilometers. |
Функция normalize-space
удаляет лидирующие и завершающие символы-разделители и сжимает все внутренние идущие подряд разделители в один пробел, возвращая полученную строку. Функция применяется следующим образом:
string normalize-space(string?)
В следующем примере я добавил дополнительные пробелы в атрибут UNITS
элемента Меркурия:
Mercury
.0553
58.65
1516
.983
43.4
.
.
.
Функция normalize-space
поможет удалить лишние пробелы в таблице стилей:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
.
.
.
|
|
|
|
.
.
.
И вот результат — обратите внимание на то, что лишние пробелы убраны:
The Planets Table
The Planets Table
.
.
.
Как можно догадаться по имени (начинается с), функция starts-with
проверяет, начинается ли одна строка с другой.
boolean starts-with(string-to-examine, possible-start-string)
Читать дальше