Главная » Статьи для тега "with-param"

Эмуляция объектно-ориентированных методик повторного использования и паттернов проектирования

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

Задача

Хотелось бы перейти от «копирования и вставки» к созданию библиотек по­вторно используемого XSLT-кода.

Решение

Понятно, что XSLT – не объектно-ориентированный язык. Однако объектная ориентация – это, скорее, принципы конструирования обобщенного повторно ис­пользуемого кода, а не просто классы, объекты, наследование, инкапсуляция и т.д.

Читать »

Создание обобщенных функций агрегирования элементов

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

Задача

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

Решение

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

Читать »

Вычисление комбинаторных функций

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

Задача

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

Решение XSLT 1.0

Если вы знаете, что число перестановок размера г равно N! / r!, а число со­четаний – N! / r! * (N-r)!, то может возникнуть искушение пропустить этот пример, поскольку ранее уже был приведен способ вычисления факториала. Од­нако так как факториалы растут очень быстро, придется проявить некоторое хитроумие.

Читать »

Сравнение наборов узлов на равенство по значению

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

Задача

Требуется определить, равны ли (по значению) узлы из одного набора узлам из другого набора (порядок игнорируется).

Решение

Эта задача несколько сложнее, чем кажется на первый взгляд. Рассмотрим очевидное решение, которое во многих случаях будет работать:

Читать »

Форматирование чисел

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

Задача

Требуется выводить числа в разных форматах.

Решение

У этой задачи есть два общих решения.

Использование xsl:decimal-format в сочетании с format-number()

Элемент верхнего уровня xsl:decimal-format задает именованное прави­ло форматирования, на которое можно ссылаться при вызове функции format- number(). У элемента xsl:decimal-format много атрибутов, описывающих правила форматирования. В таблице 3.1 описываются все атрибуты, и в скобках для каждого приведено значение по умолчанию.

Читать »

Создание повторно используемых утилит генерации SVG для графиков и диаграмм

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

Задача

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

Решение XSLT 1.0

Если вы планируете много заниматься созданием SVG-файлов с помощью XSLT, то было бы полезно разработать библиотеку шаблонов для генерации гра­фических компонентов. В этом разделе мы приведем несколько примеров тако­го рода.

Читать »

Определение светских и церковных праздников

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

Задача

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

Решение

К первому типу праздников относятся те, которые каждый год отмечаются в один тот же день. Например, определить абсолютную дату Дня независимости в США совсем просто:

Читать »

Преобразование римских числительных в числа

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

Задача

Требуется преобразовать число, записанное римскими цифрами, в обычное число.

Решение

Римская система счисления не является позиционной. Число в ней записыва­ется путем прибавления или вычитания фиксированного количества римских цифр. Если следующий символ имеет меньшее или такое же значение, то произво­дится добавление, иначе вычитание.

Читать »

Создание обобщенных генераторов наборов узлов

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

Задача

Требуется написать повторно используемые шаблоны для динамической ге­нерации набора узлов.

Решение

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

Читать »

Проверка битов

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

Задача

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

При работе с XML не пытайтесь во чтобы бы то ни стало закодировать ин­формацию в виде набора битов. Применяйте это решение лишь тогда, когда не можете контролировать способ представления данных.

Читать »

Исламский календарь

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

Задача

Требуется работать с датами в исламской системе летоисчисления.

Трудно, если вообще невозможно, придумать универсально пригодные ал­горитмы для исламского календаря. Связано это с тем, что месяц начина­ется в тот день, когда человек впервые видит серп луны. Вычислить даты новолуния можно абсолютно точно, но вот видимость луны зависит от та­ких факторов, как погода и положение наблюдателя. Поэтому очень слож­но заранее сказать, когда начнется новый месяц. Хуже того, некоторым мусульманам достаточно, чтобы луну увидел местный наблюдатель, тогда как другие требуют, чтобы наблюдение было произведено двумя заслужи­вающими доверия мусульманами. Исключением является Саудовская Аравия, где в основу календаря положены астрономические вычисления, а не визуальные наблюдения. Приведенные ниже алгоритмы работы с ис­ламским календарем могут давать ошибку в несколько дней.

Читать »

Даты и время – Введение

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

В самом языке XSLT 1.0 нет понятия времени. Однако дата и время – немало­важный аспект повседневной жизни. Необходимость манипулировать ими возни­кает в программах очень часто, особенно при разработке для Web. Поэтому так странно и печально, что в XSLT 1.0 не встроена поддержка для работы с ними.

Читать »

Повторение строки N раз

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

Задача

Требуется повторить строку N раз, где N – параметр. Например, нужно допол­нить строку пробелами, чтобы выровнять ее по правому или левому краю.

Решение XSLT 1.0

Задачу можно решить красиво, применив рекурсивный алгоритм, который удваивает строку, пока не будет достигнута нужная длина. Надо только аккурат­но рассмотреть случай, когда значение $count нечетно.

Читать »

Создание HTML-таблиц

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

Задача

Требуется преобразовать XML-документ в HTML-таблицы.

Решение

Таблицы часто создаются в два этапа. Сначала генерируется табличная раз­метка верхнего уровня, а затем для создания строк и ячеек применяются шаблоны.

Показанное ниже решение – это частичная модификация таблицы стилей из ре­цепта 10.2. Изменения выделены полужирным шрифтом:

Читать »

Обработка узлов по позиции

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

Задача

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

Решение

Примените команду xsl:sort, указав в качестве атрибута select функцию position() или last(). Простейший пример такого рода – обработка узлов в обратном порядке документа.

Читать »