C++. Сборник рецептов
Шрифт:
#include <xalanc/Include/PlatformDefinitions.hpp>
#include <xalanc/XalanTransformer/XalanTransformer.hpp>
#include <xalanc/XSLT/XSLTInputSource.hpp>
#include <xalanc/XSLT/XSLTResultTarget.hpp>
#include <xercesc/util/PlatformUtils.hpp>
#include "xerces_strings.hpp" // Пример 14.4
using namespace std;
using namespace xercesc;
using namespace xalanc;
//
Утилита RAII, которая инициализирует парсер и освобождает ресурсы
// при выходе из области видимости
struct XalanInitializer {
XalanInitializer {
XMLPlatformUtils::Initialize;
XalanTransformer::initialize;
}
~XalanInitializer {
XalanTransformer::terminate;
XMLPlatformUtils::Terminate;
}
};
int main {
try {
XalanInitializer init; // Инициализировать Xalan.
XalanTransformer xslt; // Конвертор XSLT.
XSLTInputSource xml("animals.xml"); // Документ XML из
// примера 14.1
XSLTInputSource xsl("animals.xsl"); // Таблица стилей из
// примера 14.19.
XSLTResultTarget html("animals.html"); // Результат выполнения xslt.
// Выполнить преобразование.
if (xslt.transform(xml, xsl, html) != 0) {
cout << "xml error: " << xslt.getLastError << "\n";
}
} catch (const XMLException& e) {
cout << "xml error " << toNative(e.getMessage) << "\n";
return EXIT_FAILURE;
} catch (const exception& e) {
cout << e.what << "\n";
return EXIT_FAILURE;
}
}
Пример 14.21. Документ HTML, сгенерированный программой из примера 14.20
<html>
<head>
<МЕТА http-equiv="Content Type" content="text/html; charset=UTF-8">
<title>Feldman Family Circus Animals</title>
</head>
<body>
<h1>Feldman Family Circus Animals</h1>
<table cellpadding="3" border="1">
<tr>
<th>Name</th>
<th>Species</th>
<th>Date of Birth</th>
<th>Veterinarian</th>
<th>Trainer</th>
</tr>
<tr>
<td>Herby</td>
<td>elephant</td>
<td>1992-04-23</td>
<td>
<table>
<tr><th>name:</th><td>Dr. Hal Brown</td></tr>
<tr><th>phone:</th><td>(801)595-9627</td></tr>
</table>
</td>
<td>
<table>
<tr><th>name:</th><td>Bob Fisk</td></tr>
<tr><th>phone:</th><td>(801)881-2260</td></tr>
</table>
</td>
</tr>
<tr>
<td>Sheldon</td>
<td>parrot</td>
<td>1998-09-30</td>
<td>
<table>
<tr><th>name:</th><td>Dr. Kevin Wilson</td></tr>
<tr><th>phone:</th><td>(801)466-6498</td></tr>
</table>
</td>
<td>
<table>
<tr><th>name:</th><td>Eli Wendel</td></tr>
<tr><th>phone:</th><td>(801)929-2506</td></tr>
</table>
</td>
</tr>
<tr>
<td>Dippy</td>
<td>penguin</td>
<td>2001-06-08</td>
<td>
<table>
<tr><th>name:</th><td>Dr. Barbara Swayne</td></tr>
<tr><th>phone:</th><td>(801)459-7746</td></tr>
</table>
</td>
<td>
<table>
Поделиться с друзьями: