Приблизительный внешний вид формы показан на рис. 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.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

Вы читаете Технология XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату