указанием клички, вида, даты рождения, ветеринара и дрессировщика. Пример 14.20 показывает, как можно использовать библиотеку Xalan, чтобы воспользоваться этой таблицей стилей для документа animals.xml. В примере 14.21 приводится HTML, сгенерированный программой из примера 14.20; этот HTML переформатирован для лучшего восприятия.

Пример 14.19. Таблица стилей для animals.xml

<?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>

Пример 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) {

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату