Чтение онлайн

на главную - закладки

Жанры

Технология XSLT

Валиков Алексей Н.

Шрифт:

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

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

этого языка в проектах интеграции, основанных на использовании XML, может быть очень велика.

□ Использование XSLT-преобразований может коренным образом упростить создание Web-ориентированных приложений. Надо сказать, что во многих случаях XSLT-преобразования просто избавляют от необходимости программировать что-либо на других языках; однако даже тогда, когда без традиционных подходов не обойдешься, XSLT служит хорошую службу, обеспечивая простой, удобный и легко настраиваемый вывод фрагментов HTML.

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

Выполнение XSLT-преобразований в Object Pascal

В этой главе мы приведем пример использования XSLT-преобразований в простом проекте, созданном в среде разработки Delphi. Базовым языком Delphi является Object Pascal. Решение, которое мы предложим, будет основываться на использовании библиотеки MSXML Parser 3.0 от Microsoft.

Небольшое приложение, которое мы создадим, будет преобразовывать XML-документ (по умолчанию — "

source.xml
") при помощи XSLT-преобразования (по умолчанию — "
stylesheet.xsl
") и показывать результат преобразования.

Импорт MSXML в Delphi

Первым шагом после создания нового проекта (назовем его

DelphiXML
) будет импортирование библиотеки типов MSXML. Это позволит использовать в программе классы, интерфейсы и методы MSXML, в том числе и XSLT-процессор.

Для того чтобы импортировать библиотеку типов MSXML, выберем пункт меню Project/Import Type Library… (рис. 9.1).

Рис. 9.1. Импорт MSXML — шаг 1

В появившемся диалоге выберем пункт "Microsoft XML v3.0 (Version 3.0)" и создадим новый модуль кнопкой Create Unit (рис. 9.2).

Рис. 9.2. Импорт MSXML — шаг 2

Получившийся файл

MSXML2_TLB.pas
присоединим к проекту (Project/Add to Project…); теперь можно приступать к работе.

Для того чтобы использовать MSXML в нашем проекте, нам потребуется включить модуль

MSXML2_TLB
в список используемых модулей. Кроме того, для обработки исключений нам также потребуется модуль
comobj
. В итоге объявление
uses
будет выглядеть следующим образом:

uses

 Windows, Messages, SysUtils, Classes, Graphics, Controls,

 Forms, Dialogs, StdCtrls, ComCtrls, MSXML2_TLB, comobj;

Форма

проекта

Нам понадобится форма с тремя страничками и тремя компонентами

TMemo
. В первом будет показываться исходный текст преобразуемого документа, во втором — XSLT-преобразование и в третьем — результат преобразования.

Приблизительный внешний вид формы показан на рис. 9.3.

Рис. 9.3. Внешний вид формы проекта

Использование DOMDocument

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

DOMDocument
. В главном модуле проекта мы объявим две переменные, которые будут соответствовать обрабатываемому документу (
xmlSource
) и документу преобразования (
xmlStylesheet
):

var

 xmlSource: DOMDocument;

 xmlStylesheet: DOMDocument;

Для того чтобы создать экземпляры объектов наших документов, мы воспользуемся классом

СoDOMDocument
, который был создан в модуле
MSXML2_TLB
при импортировании. Метод
Create
этого класса создаст объекты, к методам и свойствам которых мы будем обращаться посредством уже упомянутого интерфейса
DOMDocument
:

xmlSource := CoDOMDocument.Create;

xmlStylesheet := CoDOMDocument.Create;

Для того чтобы загрузить XML-файл, мы воспользуемся функцией

load
интерфейса
DOMDocument
:

xmlSource.load('source.xml');

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

try...except
и отрабатывать исключение
EoleException
:

try

 xmlStylesheet.load('stylesheet.xsl');

 memoStylesheet.Text := xmlStylesheet.xml;

except

 on e: EOleException do

memoStylesheet.Text := e.Message;

end;

Для выполнения самого преобразования нам будет нужно использовать функцию

transformNode
:

try

 memoResult.Text := xmlSource.transformNode(xmlStylesheet);

except

 on e: EOleException do

memoResult.Text := e.Message;

end;

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

Поделиться:
Популярные книги

Убивать чтобы жить 9

Бор Жорж
9. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 9

Первый среди равных. Книга X

Бор Жорж
10. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Первый среди равных. Книга X

Аристократ из прошлого тысячелетия

Еслер Андрей
3. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Аристократ из прошлого тысячелетия

Гримуар тёмного лорда I

Грехов Тимофей
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар тёмного лорда I

Кодекс Крови. Книга ХIII

Борзых М.
13. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХIII

Кодекс Крови. Книга ХI

Борзых М.
11. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХI

Эволюция мага

Лисина Александра
2. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эволюция мага

Вишенка на десерт

Лис Алеся
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Вишенка на десерт

Наследник и новый Новосиб

Тарс Элиан
7. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наследник и новый Новосиб

Тринадцатый

Северский Андрей
Фантастика:
фэнтези
рпг
7.12
рейтинг книги
Тринадцатый

Покоривший СТЕНУ. Десятый этаж

Мантикор Артемис
3. Покоривший СТЕНУ
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Покоривший СТЕНУ. Десятый этаж

На границе империй. Том 3

INDIGO
3. Фортуна дама переменчивая
Фантастика:
космическая фантастика
5.63
рейтинг книги
На границе империй. Том 3

Дорогами алхимии

Видум Инди
2. Под знаком Песца
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Дорогами алхимии

Ларь

Билик Дмитрий Александрович
10. Бедовый
Фантастика:
городское фэнтези
мистика
5.75
рейтинг книги
Ларь