Книга: Технология 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. Выходящий документ
- Восстановление с использованием инструмента gbak
- Типы страниц и их использование
- Использование констант
- Использование переменной окружения ISC_PATH
- Использование сервера Yaffil внутри процесса
- Использование CAST() с типами дата
- Использование типов содержимого и столбцов
- Вызов хранимых процедур InterBase с использованием стандартного синтаксиса ODBC
- Использование кнопки Автосумма
- 24.7. Использование программы-твикера
- Использование отдельных процессоров XSLT
- 4. Использование подзапросов