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

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

Жанры

Технология XSLT

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

Шрифт:
Листинг 9.1. Использование XSLT-преобразования в Delphi

unit source;

interface

uses

 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

 StdCtrls, ComCtrls, MSXML2_TLB, comobj;

type

 TMain = class(TForm)

{ Компоненты формы и обработчики событий }

 private

 public

 end;

var

 xmlSource: DOMDocument;

 xmlStylesheet: DOMDocument;

 Main: TMain;

implementation

{$R *.DFM}

procedure TMain.FormCreate(Sender: Tobject);

begin

 xmlSource := CoDOMDocument.Create;

 xmlStylesheet := CoDOMDocument.Create;

 try

xmlSource.load('source.xml');

memoSource.Text := xmlSource.xml;

 except

on e: EOleException do

memoSource.Text := e.Message;

 end;

 try

xmlStylesheet.load('stylesheet.xsl');

memoStylesheet.Text := xmlStylesheet.xml;

 except

on e: EOleException do

memoStylesheet.Text := e.Message;

 end;

end;

procedure TMain.pcMainChange(Sender: TObject);

begin

 if pcMain.ActivePage = sheetResult then

 try

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

 except

on e: EOleException do

memoResult.Text := e.Message;

 end;

end;

{
Прочие процедуры и функции }

end.

Процесс использования нашего приложения приведен на следующих рисунках (рис. 9.4–9.6).

Рис. 9.4. Входящий документ

Рис. 9.5. Преобразование

Рис. 9.6. Выходящий документ

Выполнение XSLT-преобразований в C/C++

В качестве примера использования XSLT в языках С и С++ мы приведем очень простую программу, которая выполняет над

документом
source.xml
преобразование
stylesheet.xsl
и выводит результат в файл
document.out
. На этот раз в качестве процессора мы будем использовать Xalan-C++, а в качестве среды разработки — Microsoft Visual С++.

Настройка путей

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

#include "util/PlatformUtils.hpp"

#include "XalanTransformer/XalanTransformer.hpp"

Файл

PlatformUtils.hpp
относится к библиотеке Xerces-C++, который используется в Xalan в качестве парсера XML-документов. Файл заголовка
XalanTransformer.hpp
относится к классу
XalanTransformer
, который мы и будем использовать для преобразования нашего документа.

Заголовочные файлы Xalan и Xerces могут быть найдены в поставке Xalan в каталогах

xml-xalan\c\src
и
xml-xerces\c\src
соответственно. Для того чтобы они могли быть обнаружены компилятором, эти пути следует явным образом прописать в настройках среды (меню Tools/Options), как показано на рис. 9.7.

Рис. 9.7. Настройка путей Xalan в MSVC

Для того чтобы скомпилированный объектный код мог быть скомпонован, в проекте также должны быть указаны пути к библиотечным файлам Xalan (рис. 9.8).

Рис. 9.8. Настройка путей библиотек в проекте

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

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

Листинг 9.2. Типовой сценарий использования Xalan

// Инициализируем Xerces

XMLPlatformUtils::Initialize;

// Инициализируем класс XalanTransformer

XalanTransformer::initialize;

// Создаем экземпляр класса XalanTransformer

XalanTransformer theXalanTransformer;

...

// Выполняем преобразование

theXalanTransformer.transform( ... );

...

// Освобождаем XalanTransformer

XalanTransformer::terminate;

// Освобождаем Xerces

XMLPlatformUtils::Terminate;

В соответствии с этим сценарием наша программа будет выглядеть следующим образом:

#include "StdAfx.h"

#include "util/PlatformUtils.hpp"

#include "XalanTransformer/XalanTransformer.hpp"

#include "strstream"

int main(int argc, const char* argv[]) {

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

Кодекс Охотника. Книга VI

Винокуров Юрий
6. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга VI

Черный Маг Императора 8

Герда Александр
8. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 8

Идеальный мир для Демонолога

Сапфир Олег
1. Демонолог
Фантастика:
юмористическое фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Идеальный мир для Демонолога

Контртеррор

Валериев Игорь
6. Ермак
Фантастика:
альтернативная история
5.00
рейтинг книги
Контртеррор

Ведьмак (большой сборник)

Сапковский Анджей
Ведьмак
Фантастика:
фэнтези
9.29
рейтинг книги
Ведьмак (большой сборник)

Идеальный мир для Лекаря 29

Сапфир Олег
29. Лекарь
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Идеальный мир для Лекаря 29

Сын Тишайшего 3

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

Цеховик. Книга 1. Отрицание

Ромов Дмитрий
1. Цеховик
Фантастика:
попаданцы
альтернативная история
5.75
рейтинг книги
Цеховик. Книга 1. Отрицание

Печать зверя

Кас Маркус
7. Артефактор
Фантастика:
городское фэнтези
аниме
5.00
рейтинг книги
Печать зверя

Личный аптекарь императора. Том 5

Карелин Сергей Витальевич
5. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
7.50
рейтинг книги
Личный аптекарь императора. Том 5

Государь

Мазин Александр Владимирович
7. Варяг
Фантастика:
альтернативная история
8.93
рейтинг книги
Государь

Неудержимый. Книга XII

Боярский Андрей
12. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XII

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

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

Газлайтер. Том 17

Володин Григорий Григорьевич
17. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 17