Главная » XSLT

Генерация предложения switch

Добавлено Дата: 14 January, 2011 категория: XSLT

Задача

Требуется сгенерировать предложение switch, которое будет передавать вхо­дящие сообщения подходящим обработчикам.

Решение

В репозитории сообщений хранится информация о том, какие процессы могут принимать те или иные сообщения. Поэтому, зная имя процесса, можно сгенери­ровать предложение switch для диспетчеризации входящих сообщений:

Читать »

Реализация функций расширения на языке Java

Добавлено Дата: 13 January, 2011 категория: XSLT

Задача

Требуется написать собственное расширение на языке Java.

Решение

Во введении к этой главе мы рассматривали механизм связывания таблицы стилей с расширениями на Java, поэтому сейчас сосредоточимся на примерах.

В главе 2 показано, как преобразовывать числа из одной системы счисления в другую. На Java очень легко реализовать конвертор из десятичной системы в ше- стнадцатеричную:

Читать »

Преобразование простых именованных шаблонов в функции XSLT

Добавлено Дата: 12 January, 2011 категория: XSLT

Задача

В XSLT 1.0 не было поддержки для написания функций, а именованные шаб­лоны – не слишком удачная замена.

Решение

Если нужно всего лишь вычислить результат, а не породить новое сериализо- ванное содержимое, отдавайте предпочтение функциям XSLT 2.0. Ниже приведе­ны разнородные примеры ситуаций, когда функции гораздо удобнее именован­ных шаблонов:

Читать »

РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ

Добавлено Дата: 11 January, 2011 категория: XSLT

Какого бы разра­ботчика на XSLT я ни спрашивал, добавление регулярных выражений в XSLT стояло в верхней позиции его списка из 10 наиболее желательных усовершен­ствований. Эта врезка предназначена для тех программистов, которые еще не имели удовольствия работать с регулярными выражениями или побаиваются их. Справочник не исчерпывающий, но для начала его хватит.

Читать »

Элементы расширения в Saxon

Добавлено Дата: 11 January, 2011 категория: XSLT

XSLT 1.0 (Saxon версия 6.5.4)

можно реализовать только на языке Java. Не­обходимо определить пространство имен, которое связывает имя расширения с его реализацией. Но правила здесь более четкие, чем для функций расширения. URI пространства имен должен завершаться символом /, за которым следует пол­ностью квалифицированное имя Java-класса, реализующего интерфейс com.icl.saxon. ExtensionElementFactory:

Читать »

Реализация стандартных математических функций

Добавлено Дата: 10 January, 2011 категория: XSLT

Задача

Требуется выйти за пределы математики для пятого класса, но в XSLT необ­ходимых средств нет.

Решение XSLT 1.0

Ниже предлагаются реализации на языке XSLT 1.0 функций для вычисления абсолютного значения, квадратного корня, логарифмов, степенной функции и фак­ториала.

Читать »

Генерация XSLT из XSLT

Добавлено Дата: 10 January, 2011 категория: XSLT

Задача

Требуется сгенерировать XSLT-код из другого XML-представления. Или пре­образовать один код на XSLT или псевдо-XSLT в другой.

Решение

Иногда меня раздражают два аспекта управляющих конструкций в XSLT. Первый – отсутствие конструкции if-then-elsif-else; второй – отсутствие настоящих циклов. Конечно, я знаю о существовании команд xsl:choose и xsl:for-each, но у каждой из них есть недостатки. Так, xsl:choose мне не нравится, потому что у элемента choose нет никакого иного назначения, кроме организации дополнительного уровня вложенности. А xsl:for-each – не столько цикл, сколько конструкция для итерирования. Чтобы эмулировать поведение цикла со счетчиком, приходится прибегать к рекурсии или методу Пиза (см. рецепт 2.5), а это не красиво.

Читать »

Эффективное использование xsl:message

Добавлено Дата: 9 January, 2011 категория: XSLT

Задача

Требуется понять, почему таблица стилей делает не то, что вы ожидаете.

ф ‘ Часто бывает, что вы применяете к документу таблицу стилей, а она либо ничего не выводит, либо выводит только текст без каких бы то ни было эле­ментов. В моей практике это почти всегда означало проблему с простран­ствами имен. Очень легко забыть о префиксах элементов в команде xsl:template или допустить расхождение между URI пространства имен в документе и в таблице стилей. Напомним, что существенным является именно URI пространства имен, а не префикс. Ошибка хотя бы в одной бук­ве приведет к неприятностям. Если URI длинный, я обычно копирую объяв­ление пространства имен из документа в таблицу стилей, чтобы они га­рантированно совпадали.

Читать »

Строки XSLT – Введение

Добавлено Дата: 8 January, 2011 категория: XSLT

В деле манипуляции строками XSLT 1.0, конечно же, не хватает тяжелой ар­тиллерии Perl. Язык XSLT оптимизирован для обработки XML-разметки, а не строк. Но, поскольку XML – это просто структурированный текстовый формат, то строки с неизбежностью появляются во всех задачах преобразования, кроме самых простых. К сожалению, в XSLT 1.0 есть всего девять стандартных функций для обработки строк. Напротив, в Java их около двух десятков, а в Perl – бесспор­ном короле современных языков для обработки текстов – пара десятков плюс чрезвычайно богатый механизм регулярных выражений.

Читать »

Нахождение минимума и максимума

Добавлено Дата: 7 January, 2011 категория: XSLT

Задача

В наборе узлов требуется найти узел (или узлы) с минимальным (или макси­мальным) числовым значением.

Решение

XPath 1.0

В проекте EXSLT определены следующие функции для выполнения этих операций: exsl:min, exsl:max, exsl:lowest и exsl:highest. Функции min и max ищут узел с минимальным и максимальным числовым значением соответственно. В EXSLT функция exsl:min специфицирована следующим образом:

Читать »

Тестирование и отладка – Введение

Добавлено Дата: 7 January, 2011 категория: XSLT

Многие XSLT-сценарии пишутся для однократного применения – просто что­бы преобразовать хорошо известные входные данные. Здесь тестирование сводит­ся к выполнению преобразования и просмотру результата. Но даже в таком про­стом случае как поступить с таблицей стилей, которая делает не то, что вы хотели? Обычно для отыскания ошибки достаточно внимательно проглядеть код. Но такой способ отладки не слишком эффективен, если разработчик плохо знаком с XSLT, а к таковым следует отнести и тех, кто много работает с XML, но на проце­дурных языках. В этой главе вы познакомитесь с основными методами отладки, помогающими быстро находить типичные ошибки, а заодно лучше разобраться в XSLT.

Читать »

Реализация на XSLT сценариев, приведенных в спецификации W3C XML Query

Добавлено Дата: 7 January, 2011 категория: XSLT

Задача

Требуется выполнить запрос, аналогичный одному из приведенных в качестве при­меров в документе http://www.w3.org/TR/2001/WD-xmlquery-use-cases-20011220, но вместо языка XQuery (http://www.w3.org/TR/xquery/) использовать XSLT.

Читать »

Преобразование атрибутов в элементы

Добавлено Дата: 7 January, 2011 категория: XSLT

Задача

Имеется документ, в котором информация закодирована в виде атрибутов, а нужно закодировать ее в элементах.

Решение

Эта задача будто специально предназначена для применения идиомы переоп­ределяемого копирования, с которой мы начали эту главу. В примере ниже все ат­рибуты преобразуются в элементы.

Читать »

Генерация кода заглушки обработчика сообщения

Добавлено Дата: 7 January, 2011 категория: XSLT

Задача

Требуется сгенерировать скелет обработчика сообщения.

Решение

Следующая таблица стилей создает простой скелет обработчика. Она прини­мает на входе имя процесса и генерирует код заглушки.

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

Читать »

Выполнение обхода в прямом порядке

Добавлено Дата: 6 January, 2011 категория: XSLT

Задача

Требуется рекурсивно обработать сначала сам элемент, а потом его потомков.

Решение

Все решения в этом рецепте имеют такой общий вид:

<xsl:template match="node()">

<!– Сделать что-то с текущим узлом –>

Читать »