Процесс использования нашего приложения приведен на следующих рисунках (рис. 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;
В соответствии с этим сценарием наша программа будет выглядеть следующим образом: