Выбрать главу
Примеры

string-length('Barnes and Noble') 16

string-length('Barness#x20;& Noble') 14

Функция normalize-space

string normalize-space(string?)

Функция normalize-space производит со своим строковым аргументом так называемую нормализацию пробельного пространства. Это означает, что в строке удаляются ведущие и заключающие пробельные символы, а все последовательности пробелов заменяются одним пробельным символом. Иными словами, функция удаляет "лишние" пробелы в строке.

Если аргумент функции опущен, она выполняется со строковым значением контекстного узла.

Примеры

normalize-space(' А - В - С ') 'А-В-С'

normalize-space('А &#х9; В &#х9; С') > 'A B C'

Функция translate

string translate(string, string, string)

Функция translate производит замену символов первого своего строкового аргумента, которые присутствуют во втором аргументе на соответствующие символы третьего аргумента.

Пример

translate('abcdefgh', 'aceg', 'ACEG') 'AbCdEfGh'

Если некоторый символ повторяется во втором аргументе несколько раз, учитывается только первое его появление.

Пример

translate('abcdefgh', 'acaeaga', 'ACBECGD') 'AbCdEfGh'

Если второй аргумент длиннее третьего, символы, для которых нет соответствующей замены, удаляются из строки.

Пример

translate('a b-c=d+e|f/g\h', 'aceg-=+|/\', 'ACEG') 'AbCdEfGh'

Если третий аргумент длиннее второго, остаток строки игнорируется.

Пример

translate('abcdefgh', 'aceg', 'ACEGBDFH') ' AbCdEfGh'

Функцию translate можно использовать, например, для изменения регистра символов. Конечно, это будет работать только для тех языков, для которых такая функция будет записана, но и этого в большинстве случаев будет достаточно. В будущем предполагается включить в новые версии языка более мощные функции для работы с регистрами символов.

Пример

Для того чтобы изменять регистр слов русского языка, мы можем определить две переменные, lowercase и uppercase, которые будут содержать строчные и прописные символы основного русского алфавита (мы включили в него букву ё — строчную ("ё") и прописную ("Ё"), хотя в соответствии с Unicode она относится к расширениям). Мы также создадим два именованных шаблона, которые будут менять регистр символов строкового параметра str. Для удобства использования мы вынесем определения переменных и шаблонов во внешний модуль ru.xsl.

Листинг 6.6. Преобразование ru.xsl

<xsclass="underline" stylesheet

 version="1.0"

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

 <xsclass="underline" variable

  name="uppercase"

  select="concat('&#x410;&#x411;&#x412;&#x413;',

                 '&#x414;&#x415;&#x401;&#x416;&#x417;',

                 '&#x418;&#x419;&#x41A;&#x41B;',

                 '&#x41C;&#x41D;&#x41E;&#x41F;',

                 '&#x420;&#x421;&#x422;&#x423;',

                 '&#x424;&#x425;&#x426;&#x427;',

                 '&#x428;&#x429;&#x42A;&#x42B;',

                 '&#x42C;&#x42D;&#x42E;&#x42F;')"/>

 <xsclass="underline" variable

  name="lowercase"

  select="concat('&#x430;&#x431;&#x432;&#x433;',

                 '&#x434;&#x435;&#x451;&#x436;&#x417;',

                 '&#x438;&#x439;&#x43A;&#x43B;',

                 '&#x43C;&#x43D;&#x43E;&#x43F;',

                 '&#x440;&#x441;&#x442;&#x443;',

                 '&#x444;&#x445;&#x446;&#x447;',

                 '&#x448;&#x449;&#x44A;&#x44B;',

                 '&#x44C;&#x44D;&#x44E;&#x44F;')"/>

 <xsclass="underline" template name="lower">

  <xsclass="underline" param name="str"/>

  <xsclass="underline" value-of select="translate($str, $uppercase, $lowercase)"/>

 </xsclass="underline" template>

 <xsclass="underline" template name="upper">

  <xsclass="underline" param name="str"/>

  <xsclass="underline" value-of select="translate($str, $lowercase, $uppercase)"/>

 </xsclass="underline" template>

</xsclass="underline" stylesheet>

Использовать этот модуль можно, включив или импортировав его в основное преобразование элементами xsclass="underline" include или xsclass="underline" import. После этого в основном преобразовании будут доступны переменные lowercase и uppercase, которые можно будет использовать в функции translate и шаблоны с именами lower и upper.

Использовать функцию translate с переменными lowercase и uppercase можно следующим образом:

translate('Дом', $uppercase, $lowercase) 'дом'

translate('Дом', $lowercase, $uppercase) 'ДОМ'

Именованные шаблоны можно вызывать элементом xsclass="underline" call-template, передавая параметр при помощи xsclass="underline" with-param. Например, следующий фрагмент шаблона

...

<xsclass="underline" call-template name="lower">

 <xsclass="underline" with-param name="str" select="'Дом'"/>

</xsclass="underline" call-template>

...

создаст в выходящем дереве текстовый узел со значением "дом".

Функции множеств узлов

Функции last и position

number last()

number position()

Функция last возвращает текущий размер контекста — число, которое показывает, сколько узлов находится в обрабатываемом в данный момент множестве.

Функция position возвращает позицию контекста — число, показывающее порядковый номер контекстного узла в обрабатываемом множестве.