указанием клички, вида, даты рождения, ветеринара и дрессировщика. Пример 14.20 показывает, как можно использовать библиотеку Xalan, чтобы воспользоваться этой таблицей стилей для документа
<?xml version='1.0' encoding='utf-8'?>
<!- Таблица стилей для животных цирка Feldman Family Circus -->
<xsl:stylesheet versions='1.1'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:output method='html'/>
<xsl:template match='/'>
<html>
<head>
<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>
<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>
#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) {