C++. Сборник рецептов
Шрифт:
<th>Veterinarian</th>
<th>Trainer</th>
</tr>
<xsl:apply-templates match="animal">
</xsl:apply-templates>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="animal">
<tr>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="species"/></td>
<td><xsl:value-of select="dateOfBirth"/></td>
<xsl:apply-templates select="veterinarian"/>
<xsl:apply-templates select="trainer"/>
</tr>
</xsl:template>
<xsl:template match="veterinarian|trainer">
<td>
<table>
<tr>
<th>name:</th>
<td>
<xsl:value-of select="attribute::name"/>
</td>
</tr>
<tr>
<th>phone:</th>
<td><xsl:value of select="attribute::phone"/></td>
</tr>
</table>
</td>
</xsl:template>
</xsl:stylesheet>
Пример 14.20.
Применение таблицы стилей animals.xsl для файла animals.xml с использованием библиотеки Xalan
#include <exception>
#include <iostream> // cout
#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>
Поделиться:
Популярные книги
Душелов. Том 3
3. Внутренние демоны
Фантастика:
альтернативная история
аниме
фэнтези
ранобэ
хентай
5.00
рейтинг книги
Возвышение Меркурия. Книга 3
3. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга VII
7. РОС: Кодекс Крови
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Архил...? 4
4. Архил...?
Фантастика:
фэнтези
попаданцы
альтернативная история
5.50
рейтинг книги
Чехов
1. Адвокат Чехов
Фантастика:
фэнтези
боевая фантастика
альтернативная история
5.00
рейтинг книги
Переписка 1826-1837
Документальная литература:
публицистика
5.00
рейтинг книги

Предатель. Цена ошибки
Измена
Любовные романы:
современные любовные романы
5.75
рейтинг книги
Газлайтер. Том 3
3. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Родословная. Том 2
2. Линия крови
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Магия чистых душ
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Князь Серединного мира
4. Страж
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Вдова на выданье
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Цветы сливы в золотой вазе, или Цзинь, Пин, Мэй
Старинная литература:
древневосточная литература
7.00
рейтинг книги
Охота на разведенку
Любовные романы:
современные любовные романы
эро литература
6.76