Валиков Алексей Н.
Шрифт:
<input type="submit" value="Post"/>
</td>
</tr>
</table>
</form>
<!-- Обрабатываем страницу -->
<xsl:apply-templates select="page"/>
</xsl:template>
<!-- Обработка страницы -->
<xsl:template match="page">
<xsl:apply-templates select="messages"/>
</xsl:template>
<!-- Обработка сообщений -->
<xsl:template match="messages">
<xsl:apply-templates select="message"/>
</xsl:template>
<!-- Вывод сообщения -->
<xsl:template match="message">
<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="#"><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"/>
</xsl:template>
</xsl:stylesheet>
Теперь займемся самим php-скриптом.
Листинг 9.5. Скрипт guestbook.php
<html>
<head>
<title>Guestbook</title>
<META
http-equiv="Content-Type"
content="text/html; charset=windows-1251">
<link rel="stylesheet" type="text/css" href="#"/>
</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.