Книга: Технология XSLT

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

Использование 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
   memoResult.Text := e.Message;
 end;
end;
{ Прочие процедуры и функции }
end.

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


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


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


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

Оглавление книги


Генерация: 0.062. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз