Kniga-Online.club

Алексей Валиков - Технология XSLT

Читать бесплатно Алексей Валиков - Технология XSLT. Жанр: Программирование издательство -, год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

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. Выходящий документ

Выполнение 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-xalancsrc и xml-xercescsrc соответственно. Для того чтобы они могли быть обнаружены компилятором, эти пути следует явным образом прописать в настройках среды (меню 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[]) {

 using std::cerr;

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

 XMLPlatformUtils::Initialize();

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

 XalanTransformer::initialize();

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

 XalanTransformer theXalanTransformer;

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

 int theResult = theXalanTransformer.transform("source.xml",

  "stylesheet.xsl", "document.out");

 // В случае, если произошла ошибка, выводим, информацию о ней

 if (theResult != 0) {

  cerr << "XalanError: n" << theXalanTransformer.getLastError();

 }

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

 XalanTransformer::terminate();

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

 XMLPlatformUtils::Terminate();

 return theResult;

}

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

Начиная с четвертых версий, PHP поставляется вместе с XSLT-процессором Sablotron, который включен в РНР в качестве расширения.

Для того чтобы использовать Sablotron в PHP-скриптах, следует выполнить следующие действия:

1. Убедиться, что файл php_sablot.dll присутствует в каталоге расширений.

2. Убедиться, что в файле php.ini присутствует строка extension=php_sablot.dll.

3. Убедиться, что библиотеки expat.dll и sablot.dll находятся в каталоге, указанном в переменной окружения PATH.

Замечание

Приведенное описание касается только использования Sablotron на платформе Windows32. На других платформах потребуется сконфигурировать РНР с флагом --with-sablot. В остальном установка совершенно аналогична.

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

Страница гостевой книги

Предположим, что мы храним (или экспортируем) данные гостевой книги в следующем формате.

Листинг 9.3. Данные гостевой книги — файл source.xml

<page>

 <date>18/08/2001</date>

 <messages>

  <message>

   <ID>1</ID>

   <POSTED>15/03/45BC</POSTED>

   <PERSON>Julius</PERSON>

   <EMAIL>[email protected]</EMAIL>

   <SUBJECT>:(</SUBJECT>

   <MSG>Et tu, Brute...</MSG>

  </message>

  <message>

   <ID>2</ID>

   <POSTED>20/07/1969</POSTED>

   <PERSON>Neil</PERSON>

   <SUBJECT>What did I have to say? Oh, yes...</SUBJECT>

   <MSG>One small step for a man; one giant leap for mankind!</MSG>

  </message>

 </messages>

</page>

Для того чтобы вывести форму гостевой книги и сообщения, содержащиеся в source.xml, мы создадим следующее преобразование.

Листинг 9.4. Преобразование stylesheet.xsl

<xsl:stylesheet

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <!-- Формат вывода - html -->

 <xsl:output method="html"/>

 <!-- Шаблон обработки корневого узла -->

 <xsl:template match="/">

  <!-- Создаем форму гостевой книги -->

  <form method="POST" action="guestbook.xsql">

   <table>

    <tr>

     <td>Name</td>

     <td>E-mail</td>

    </tr>

    <tr>

     <td><input class="flat" type="text" name="person"/></td>

     <td><input class="flat" type="text" name="email"/></td>

Перейти на страницу:

Алексей Валиков читать все книги автора по порядку

Алексей Валиков - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


Технология XSLT отзывы

Отзывы читателей о книге Технология XSLT, автор: Алексей Валиков. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*