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

Пример

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

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

<xsl:stylesheet

 version='1.0'

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

 <xsl: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;')'/>

 <xsl: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;')'/>

 <xsl:template name='lower'>

  <xsl:param name='str'/>

  <xsl:value-of select='translate($str, $uppercase, $lowercase)'/>

 </xsl:template>

 <xsl:template name='upper'>

  <xsl:param name='str'/>

  <xsl:value-of select='translate($str, $lowercase, $uppercase)'/>

 </xsl:template>

</xsl:stylesheet>

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

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

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

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

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

...

<xsl:call-template name='lower'>

 <xsl:with-param name='str' select=''Дом''/>

</xsl:call-template>

...

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

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

Функции last и position

number last()

number position()

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

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

Пример

В этом примере мы будем заменять все элементы элементами вида

<element name='...' position='...'>

 ...

</element>

где атрибут name будет содержать имя, a position — через дробь позицию элемента в контексте и размер контекста.

Листинг 6.7. Входящий документ

<а>

 <b/>

 <c/>

 <d>

  <e/>

  <f/>

 </d>

</a>

Листинг 6.8. Преобразование

<xsl:stylesheet

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

0

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

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