Главная » XSLT

Расширение XSLT с помощью JavaScript

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

Задача

Требуется реализовать на языке JavaScript функциональность, отсутствую­щую в XSLT.

Решение

В следующих примерах мы пользуемся имеющейся в процессоре Xalan-Java 2 возможностью вызывать программы на сценарных языках, например JavaScript. Обычно расширения на JavaScript пишутся для того, чтобы вызвать функцию, кото­рой нет ни в XSLT, ни в XPath. Типичный пример – тригонометрические функции:

Читать »

Генерация кода XML – Введение

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

Автоматизация – это Святой Грааль в разработке программного обеспече­ния. Вообще, прогресс в этой области в значительной мере обязан идее генера­ции кода по той или иной спецификации. Разве не этим занимаются ассемблеры и компиляторы? Но есть и другой вид генерации кода, когда целью является не исполняемый машинный код, а программа на языке высокого уровня, напри­мер, Java или C++. Зачем это может понадобиться и какое к этому отношение имеет XML?

Читать »

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

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

Задача

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

Решение XSLT 1.0

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

Читать »

Создание таблиц стилей, управляемых данными

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

Задача

Требует сгенерировать HTML-разметку, стилизованную в соответствии с отображаемыми данными.

Решение XSLT 1.0

Наборы атрибутов в XSLT – отличный механизм для инкапсуляции сложнос­тей, сопутствующих стилизации, которая управляется данными. Рассмотрим сле­дующий XML-документ, описывающий инвестиционный портфель:

Читать »

Отбор узлов по контексту

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

Задача

Требуется отобрать узлы, лежащие между двумя заданными.

Решение XSLT 1.0

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

Читать »

Преобразование XML в HTML – Введение

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

Рискну высказать предположение, что по меньшей мере 60 процентов HTML- кода, опубликованного сегодня в Интернете, сгенерировано программно. Не по­тому, что HTML-код так трудно писать вручную, как намекает Тим Бернерс-Ли в цитате, вынесенной в эпиграф к этой главе (трудно, конечно, но теперь у нас есть мощные HTML-редакторы), а потому что с помощью динамической генерации можно достичь куда большего.

Читать »

Вычисление последнего дня месяца

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

Задача

Зная месяц и год, вычислить последний день месяца.

Решение XSLT 1.0

<xsl:template name="ckbk:last-day-of-julian-month"> <xsl:param name="month"/> <xsl:param name="year"/> <xsl:choose>

Читать »

Использование XSLT в качестве языка стилизации

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

Задача

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

Решение

Вполне достаточно решения на XSLT 1.0. Ниже приведен пример преобразо­вания фрагмента документа в формате DocBook в HTML с использованием таб­лицы стилей XSLT. В качестве исходного документа взят кусок этой главы.

Читать »

Функции расширения в Xalan-Java 2

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

XSLT 1.0 (Xalan-Java 2.6.2)

В процессоре Xalan-Java 2 связывание с функциями расширения произво­дится с помощью двух расширений Xalan: xalan:component и xalan:script, а URI пространства имен, зарезервированного для Xalan, – http:// xml.apache.org/xslt.

Читать »

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

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

Задача

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

Решение

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

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

Читать »

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

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

Задача

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

Решение

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

Читать »

Расширение и встраивание XSLT – Введение

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

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

Читать »

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

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

Задача

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

Решение

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

Читать »

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

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

Задача

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

Решение

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

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

<!– Обработать потомков –> <xsl:apply-templates/>

Читать »

Выполнение теоретико-множественных операций над наборами узлов

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

 

Задача

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

Решение XSLT 1.0

Объединение ищется тривиально, так как язык XPath поддерживает эту опе­рацию напрямую:

Читать »