УДК 004.438
ББК 32.973.26-018.2
М23
М23
Мангано, Сэл.
XSLT. Сборник рецептов / С. Мангано ; пер. с англ. А. А. Слинкина. — 2-е изд.,
эл. — 1 файл pdf : 863 с. — Москва : ДМК Пресс ; СПб : БХВ-Петербург, 2022. —
Систем. требования: Adobe Reader XI либо Adobe Digital Editions 4.5 ; экран
10". — Текст : электронный.
ISBN 978-5-89818-251-9
Язык XSLT (Extensible Stylesheet Language Transformation) стал основным инструментом
обработки XML-документов, но многие разработчики все еще не освоили его в
полной мере и потому считают, что проще модифицировать имеющийся код, чем писать
новый с нуля. В версии 2.0 многие проблемы решены, но появился ряд новых возможностей,
которые еще надо изучить. К тому же она пока недостаточно поддержана.
Во втором издании настоящей книги приведены сотни решений задач, с которыми
регулярно сталкиваются программисты. Даются варианты для обеих версий XSLT. Диапазон
рецептов чрезвычайно широк: от операций со строками и математических вычислений
до таких сложных тем, как расширение XSLT, тестирование и отладка таблиц стилей
и создание графики в форме SVG. В каждом рецепте обосновывается выбор решения
и объясняется примененная техника. Для многих задач приводятся альтернативные решения
с замечаниями по поводу удобства пользования и производительности.
Предлагая рецепты, рассчитанные на разные уровни квалификации, эта книга станет
идеальным спутником программиста, который любит учиться на примерах. Неважно,
примериваетесь вы к XSLT впервые или уже знакомы с этим языком и хотите иметь подборку
готовых рецептов для решения сложных задач, в ней вы найдете самые разные
способы применения XSLT.
УДК 004.438
ББК 32.973.26-018.2
В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами защиты
авторских прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации.
ISBN 978-5-89818-251-9
© Оформление, ДМК Пресс
© Издание, БХВПетербург
Стр.3
Содержание
Предисловие .................................................................................. 9
О структуре книги ....................................................................... 11
Типографские соглашения ......................................................... 13
О примерах кода ........................................................................ 14
Благодарности ........................................................................... 15
Глава 1. Язык XPath................................................................... 17
1.1. Применение осей ................................................................ 18
1.2. Фильтрация узлов ............................................................... 24
1.3. Работа с последовательностями ......................................... 27
1.4. Включение условий в выражения if ...................................... 29
1.5. Исключение рекурсии с помощью выражений for ............... 32
1.6. Упрощение сложной логики с помощью кванторов ............. 34
1.7. Операции над множествами ............................................... 36
1.8. Сравнение узлов ................................................................. 37
1.9. Как ужиться с расширенной системой типов в XPath 2.0 ..... 38
1.10. Как воспользоваться расширенной системой типов
в XPath 2.0 .......................................................................... 41
Глава 2. Строки .......................................................................... 43
2.0. Введение ............................................................................. 43
2.1. Завершается ли данная строка указанной подстрокой?...... 44
2.2. Нахождение позиции начала подстроки .............................. 44
2.3. Удаление заданных символов из строки ............................. 45
2.4. Поиск подстроки с конца строки ......................................... 49
2.5. Повторение строки N раз .................................................... 53
2.6. Обращение строки .............................................................. 57
2.7. Замена текста ..................................................................... 61
2.8. Преобразование регистра .................................................. 67
2.9. Разбиение строки на лексемы ............................................. 70
2.10. Как обойтись без регулярных выражений .......................... 73
2.11. Использование регулярных выражений ............................. 74
2.12.Расширения EXSLT для работы со строками ...................... 76
Глава 3. Математические операции над числами ............. 80
3.0. Введение ............................................................................. 80
3.1. Форматирование чисел....................................................... 81
3.2. Округление чисел с заданной точностью ............................ 90
Стр.4
Содержание
4
3.3. Преобразование римских числительных в числа................. 93
3.4. Преобразование из одной системы счисления в другую ..... 96
3.5. Реализация стандартных математических функций .......... 100
3.6. Вычисление сумм и произведений .................................... 114
3.7. Нахождение минимума и максимума ................................ 120
3.8. Вычисление статистических функций ............................... 128
3.9. Вычисление комбинаторных функций ............................... 132
3.10. Проверка битов................................................................ 134
Глава 4. Даты и время ............................................................ 141
4.0. Введение ........................................................................... 141
4.1. Вычисление дня недели .................................................... 143
4.2. Вычисление последнего дня месяца ................................. 145
4.3. Получение названий дней и месяцев ................................ 146
4.4. Вычисление юлианского и абсолютного дня,
соответствующих заданной дате....................................... 151
4.5. Вычисление номера недели, соответствующего
заданной дате ................................................................... 156
4.6. Юлианский календарь ....................................................... 157
4.7. Календарь ISO ................................................................... 158
4.8. Исламский календарь ....................................................... 161
4.9. Еврейский календарь ........................................................ 164
4.10.Форматирование даты и времени .................................... 174
4.11. Определение светских и церковных праздников ............. 187
Глава 5. Отбор и обход ........................................................... 191
5.0. Введение ........................................................................... 192
5.1. Игнорирование элементовдубликатов ............................. 194
5.2. Отбор всех элементов, кроме одного ................................ 200
5.3. Отбор узлов по контексту .................................................. 201
5.4. Выполнение обхода в прямом порядке .............................. 203
5.5. Выполнение обхода в обратном порядке ........................... 208
5.6. Выполнение обхода во внутреннем порядке...................... 210
5.7. Выполнение обхода по уровням ........................................ 214
5.8. Обработка узлов по позиции ............................................. 221
Глава 6. XSLT 2.0...................................................................... 229
6.0. Введение ........................................................................... 229
6.1. Преобразование простых именованных шаблонов
в функции XSLT ................................................................. 229
6.2. Для группировки пользуйтесь командой foreachgroup,
а не методом Мюнха.......................................................... 231
Стр.5
Содержание
5
6.3. Модульность и режимы ..................................................... 235
6.4. Применение типов в целях безопасности и точности
выражения намерений ...................................................... 236
6.5. Избегайте подводных камней при переносе
с XSLT 1.0 на 2.0 ................................................................ 238
6.6. Эмуляция объектноориентированных методик
повторного использования и паттернов
проектирования ................................................................ 240
6.7. Обработка неструктурированного текста
с помощью регулярных выражений ................................... 245
6.8. Решение трудных задач сериализации
с помощью таблиц символов............................................. 249
6.9. Вывод нескольких документов .......................................... 251
6.10. Обработка строковых литералов, содержащих кавычки ..... 253
6.11. Новые возможности старых конструкций XSLT 1.0 .......... 253
Глава 7. Преобразование XML в текст ................................ 260
7.0. Введение ........................................................................... 260
7.1. Пустое пространство......................................................... 261
7.2. Экспорт XML в файл с разделителями полей..................... 267
7.3. Создание отчета с несколькими колонками ...................... 287
7.4. Отображение иерархии ..................................................... 299
7.5. Вывод текста с нумерацией .............................................. 308
7.6. Вывод текста в области заданной ширины
с заданным выравниванием .............................................. 319
Глава 8. Преобразование XML в XML .................................. 323
8.0. Введение ........................................................................... 323
8.1. Преобразование атрибутов в элементы ............................ 324
8.2. Преобразование элементов в атрибуты ............................ 327
8.3. Переименование элементов или атрибутов ...................... 332
8.4. Объединение документов с одной и той же схемой .......... 339
8.5. Объединение документов с различными схемами ............ 345
8.6. Расщепление документов ................................................. 351
8.7. Уплощение иерархии XML ................................................. 353
8.8. Углубление иерархии XML ................................................. 357
8.9. Реорганизация иерархии XML ........................................... 363
Глава 9. Опрос XMLдокумента ............................................ 368
9.0. Введение ........................................................................... 369
9.1. Выполнение теоретикомножественных операций
над наборами узлов .......................................................... 370
Стр.6
Содержание
6
9.2. Выполнение теоретикомножественных операций
над наборами узлов с использованием семантики
значений ........................................................................... 373
9.3. Сравнение наборов узлов на равенство по значению ....... 385
9.4. Выполнение запросов, сохраняющих структуру ................ 390
9.5. Соединения ....................................................................... 393
9.6. Реализация на XSLT сценариев, приведенных
в спецификации W3C XML Query ....................................... 398
Глава 10. Преобразование XML в HTML ............................. 433
10.0. Введение ......................................................................... 433
10.1. Использование XSLT в качестве языка стилизации .......... 434
10.2. Создание документов, связанных гиперссылками ........... 443
10.3. Создание HTMLтаблиц ................................................... 446
10.4.Создание фреймов .......................................................... 455
10.5. Создание таблиц стилей, управляемых данными............. 461
10.6. Создание замкнутого преобразования ............................ 468
10.7. Заполнение формы .......................................................... 473
Глава 11. Преобразование XML в SVG ................................ 480
11.0. Введение ......................................................................... 480
11.1. Преобразование имеющейся заготовки SVG ................... 482
11.2. Создание повторно используемых
утилит генерации SVG для графиков и диаграмм ............. 490
11.3. Создание графического представления деревьев ........... 532
11.4. Создание интерактивных Webстраниц,
включающих SVG ............................................................. 543
Глава 12. Генерация кода ................................................ 554
12.0. Введение ......................................................................... 555
12.1. Генерация определений констант .................................... 565
12.2. Генерация предложения switch ........................................ 570
12.3. Генерация кода заглушки обработчика сообщения ......... 575
12.4. Генерация оберток для данных ........................................ 579
12.5. Генерация функций форматированной печати ................ 584
12.6. Генерация Webклиента для тестирования
ввода данных ................................................................... 593
12.7. Генерация CGIсценария для обработки
тестовых данных .............................................................. 595
12.8. Генерация кода из UMLмоделей,
описанных на языке XMI ................................................... 601
12.9. Генерация XSLT из XSLT................................................... 620
Стр.7
Содержание
7
Глава 13. Рецепты применения XSLT
в вертикальных приложениях .......................................... 625
13.0. Введение ......................................................................... 625
13.1. Преобразование документов из формата Visio VDX
в формат SVG ........................................................................... 626
13.2. Работа с электронными таблицами в формате Excel XML ..... 641
13.3. Генерация тематических карт из UMLмодели
с помощью XMI ......................................................................... 653
13.4. Генерация Webсайтов из тематических карт .................. 673
13.5. Генерация документации о SOAP из WSDLдокумента .... 689
Глава 14. Расширение и встраивание XSLT ...................... 706
14.0. Введение ......................................................................... 706
14.1. Функции расширения в Saxon .......................................... 707
14.2.Элементы расширения в Saxon ........................................ 708
14.3. Функции расширения в XalanJava 2 ................................ 709
14.4. Описание Javaфункций расширения в формате класса ..... 709
14.5. Описание Javaфункций расширения в формате пакета ..... 710
14.6. Описание Javaфункций расширения в формате Java ..... 710
14.7. Функции расширения на языке сценариев
с использованием встроенного сценария ........................ 711
14.8. Элементы расширения в XalanJava 2 .............................. 711
14.9. Реализация элемента расширения на языке Java ............ 711
14.10.Реализация элемента расширения на сценарном языке..... 712
14.11.Функции расширения в MSXML ...................................... 713
14.12.Использование встроенных расширений Saxon и Xalan .... 714
14.13.Расширение XSLT с помощью JavaScript ........................ 730
14.14.Реализация функций расширения
на языке Java .................................................................. 736
14.15.Реализация элементов расширения
на языке Java .................................................................. 744
14.16.Работа с XSLT в программах
на языке Perl ................................................................... 760
14.17.Работа с XSLT в программах
на языке Java .................................................................. 763
Глава 15. Тестирование и отладка ...................................... 767
15.0. Введение ......................................................................... 767
15.1. Эффективное использование xsl:message ....................... 768
15.2. Трассировка потока обработки документа
таблицей стилей .............................................................. 771
Стр.8
Содержание
8
15.3. Автоматизация вставки отладочной печати ..................... 778
15.4. Встраивание тестовых данных в служебные
таблицы стилей ........................................................................ 786
15.5. Организация автономных тестов ..................................... 791
15.6. Тестирование граничных условий и ошибочных данных ..... 794
Глава 16. Обобщенное
и функциональное программирование .............................. 798
16.0. Введение ......................................................................... 798
16.1. Создание полиморфного XSLTкода ................................ 805
16.2. Создание обобщенных функций
агрегирования элементов ................................................ 814
16.3. Создание обобщенных функций
ограниченного агрегирования ......................................... 828
16.4. Создание обобщенных функций
отображения .................................................................... 836
16.5. Создание обобщенных генераторов
наборов узлов .................................................................. 846
Алфавитный указатель ........................................................... 853
Стр.9