<!-- Обработка сообщений -->
<xsl:template match='messages'>
<xsl:apply-templates select='message'/>
</xsl:template>
<!-- Вывод сообщения -->
<xsl:template match='message'>
<p>
<xsl:text>From: </xsl:text>
<xsl:choose>
<!-- Если e-mail не указан, выводим просто имя -->
<xsl:when test='not(EMAIL)'>
<xsl:value-of select='PERSON'/>
</xsl:when>
<!-- Если e-mail указан, выводим гиперссылку -->
<xsl:otherwise>
<A href='mailto:{EMAIL}'><xsl:value-of select='PERSON'/></A>
</xsl:otherwise>
</xsl:choose>
<!-- Выводим дату записи -->
<xsl:value-of select='concat(', ', POSTED)'/><br/>
<!-- Если была указана тема, выводим ее -->
<xsl:if test='SUBJECT'>
<xsl:text>Subject: </xsl:text>
<xsl:value-of select='SUBJECT'/><BR/>
</xsl:if>
<HR/>
<!-- Выводим текст сообщения -->
<xsl:value-of select='MSG'/>
</p>
</xsl:template>
</xsl:stylesheet>
Теперь займемся самим php-скриптом.
<html>
<head>
<title>Guestbook</title>
<META
http-equiv='Content-Type'
content='text/html; charset=windows-1251'>
<link rel='stylesheet' type='text/css' href='style.css'/>
</head>
<body>
<?php
// Загружаем входящий документ
$sourcefile = 'source.xml';
$sourcehandle = fopen($sourcefile, 'r')
or die('Невозможно открыть входящий документ.');
$source = fread($sourcehandle, filesize($sourcefile));
// Загружаем преобразование
$stylesheetfile = 'stylesheet.xsl';
$stylesheethandle = fopen($stylesheetfile, 'r')
or die('Невозможно открыть файл преобразования');
$stylesheet = fread($stylesheethandle, filesize($stylesheetfile));
// Инициализируем XSLT-процессор
$xslt = @xslt_create() or die('Can't create XSLT handle!');
// Выполняем преобразование
@xslt_process($stylesheet, $source, $result);
// Выводим результат
echo $result;
// Освобождаем ресурсы
@xslt_free($xslt);
?>
</body>
</html>
Приблизительный результат выполнения этого скрипта можно видеть на рис. 9.9.

Рис. 9.9. Сгенерированная из PHP-скрипта страница гостевой книги
Выполнение XSLT-преобразований в JavaScript
JavaScript является одним из наиболее популярных скриптовых языков, которые применяются при программировании для Web. В этой главе мы покажем, как при помощи JavaScript и MSXML создать интерактивный каталог, основанный на XML и XSLT.
Предположим, что каталог организован в виде иерархии категорий приблизительно следующим образом.
<?xml version='1.0' encoding='windows-1251'?>
<catalog>
<category title='Компьютеры'>
<category title='Настольные компьютеры'/>
<category title='Серверы'/>
</category>
<category title='Комплектующие'>
<category title='Процессоры'/>
<category title='Материнские платы'/>
</category>
<category title='Расходные материалы'>
<category title='Картриджи'>
<category title='Картриджи для плоттеров'/>
<category title='Картриджи для принтеров'/>
</category>
<category title='Тонеры'/>
<category title='Бумага'/>