Главная » XSLT

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

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

Задача

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

Решение

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

Читать »

Фильтрация узлов

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

Задача

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

Решение

Во многих мини-рецептах в разделе 1.1 для фильтрации узлов использовались пре­дикаты, но они налагали условия только на позицию или имя узла. Ниже мы рассмот­рим предикаты, фильтрующие по содержимому. Во всех примерах из этого раздела пе­ред каждым предикатом стоит имя X, но вместо него можно было бы задать произвольное путевое выражение, в частности, любое из рассмотренных в разделе 1.1.

Читать »

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

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

Задача

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

Решение

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

Читать »

Создание фреймов

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

Задача

Требуется сгенерировать HTML-разметку, в которой содержимое организо­вано с помощью фреймов.

Решение

Как и в рецепте 10.2, воспользуемся режимами для выполнения несколь­ких проходов по XML-документу. Сначала создается контейнер фреймов, со­держащий тег <FRAMESET>. Мы создадим всего два фрейма; меньший фрейм слева будет содержать имена продавцов в виде гиперссылок, загружающих со­держимое в правый фрейм. Правый – основной – фрейм будет содержать дан­ные о продажах для выбранного пользователем продавца. В примере генерируется также документ, отображаемый в основном фрейме при первой загрузке страницы.

Читать »

Операции над множествами

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

Задача

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

Решение XPath 1.0

Операция объединения (|) наборов узлов поддерживается и в XPath 1.0, но, что­бы вычислить пересечение или разность, придется проявить изобретательность.

Читать »

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

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

Задача

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

Решение XSLT 1.0

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

Читать »

Решение трудных задач сериализации с помощью таблиц символов

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

Задача

Необходим точный контроль над сериализацией документа, а имеющаяся в XSLT 1.0 команда disable-output-escaping предоставляет слишком огра­ниченные возможности.

Решение

В XSLT 2.0 появились так называемые таблицы символов, обеспечивающие точный контроль над сериализацией. Эти таблицы предназначены для использо­вания вместе с командой xsl:output.

Читать »

Как обойтись без регулярных выражений

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

Задача

Вы хотели бы выполнять операции, подобные регулярным выражениям в XSLT 1.0, но не склонны прибегать к нестандартным расширениям.

Решение

Некоторые типичные сопоставления, свойственные регулярным выражени­ям, можно эмулировать в XPath 1.0. В таблице 2.1 приведены регулярные выраже­ния в синтаксисе Perl и эквивалентные им конструкции XSLT/XPath. Одиночный символ «С» обозначает любой заданный пользователем символ, а строка «abc» – произвольную строку ненулевой длины.

Читать »

Генерация документации о SOAP из WSDL-документа

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

Задача

Вы создаете архитектуру предприятия на основе Web-сервисов с использова­нием SOAP и WSDL. Требуется, чтобы разработчики могли найти полную и по­лезную информацию об имеющихся сервисах.

Решение

В этом решении мы создадим на основе WSDL-описания сервер докумен­тации по Web-сервисам, то есть сервис, который предоставляет информацию о сервисах< ![if !supportFootnotes]>[3]. Мы напишем CGI-сценарий на языке Perl, который будет с помощью

Читать »

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

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

Задача

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

Решение

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

Читать »

Заполнение формы

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

Задача

Требуется объединить XML-данные с формой перед отправкой ее клиенту.

Решение

Если HTML-документ соответствует спецификации XHTML или хотя бы на­писан с учетом требований XML, то с помощью XSLT-преобразования его можно объединить с данными, хранящимися в формате XML. В этом рецепте мы объеди­ним данные из XML-документа с шаблонной HTML-формой. Представьте, на­пример, что дизайнер подготовил форму, которую пользователь должен запол­нить перед совершением покупки в Интернет-магазине. В эту форму нужно добавить налог с продаж, величина которого зависит от штата, указанного пользо­вателем при вводе адреса для выставления счета. Поскольку и штат, в пользу ко­торого компания взимает налог, и ставка налога могут изменяться, «зашивать» их в форму было бы неправильно. Вместо этого сервер мог бы подставить нужные данные в форму динамически, применив XSLT-преобразование.

Читать »

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

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

Задача

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

Решение

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

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

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

Читать »

Выполнение запросов, сохраняющих структуру

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

Задача

В ответ на запрос к XML-документу требуется получить ответ, структура ко­торого идентична структуре исходного документа.

Решение

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

Читать »

Игнорирование элементов-дубликатов

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

Задача

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

Решение XSLT 1.0

Задача отбора уникальных узлов – типичное применение осей preceding и preceding-sibling. Если не все отбираемые элементы являются братьями, пользуйтесь осью preceding. Следующий код порождает список уникальных продуктов, встречающихся в документе SalesByPerson.xml:

Читать »

Описание Java-функций расширения в формате Java

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

<xsl:stylesheet

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

xmlns:xalan="http://xml.apache.org/xslt"

xmlns:java="http://xml.apache.org/xslt/java">

<xalan:component prefix="Math" functions="sin cos tan atan">

Читать »