Технология XSLT
Шрифт:
<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.
Рис. 9.9. Сгенерированная из PHP-скрипта страница гостевой книги
Выполнение XSLT-преобразований в JavaScript
JavaScript является одним из наиболее популярных скриптовых языков, которые применяются при программировании для Web. В этой главе мы покажем, как при помощи JavaScript и MSXML создать интерактивный каталог, основанный на XML и XSLT.
Предположим, что каталог организован в виде иерархии категорий приблизительно следующим образом.
Листинг 9.6. XML-документ каталога
<?xml version="1.0" encoding="windows-1251"?>
<catalog>
<category title="Компьютеры">
<category title="Настольные компьютеры"/>
<category title="Серверы"/>
</category>
<category title="Комплектующие">
<category title="Процессоры"/>
Поделиться:
Популярные книги
Брак по принуждению
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Его наследник
1. Наследники Сильных
Любовные романы:
современные любовные романы
эро литература
5.87
рейтинг книги
Черный Маг Императора 5
5. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бастард
1. Династия
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хуррит
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Семь Нагибов на версту
1. Семь, загибов на версту
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Идеальный мир для Лекаря 18
18. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 13
13. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Дочь опальной герцогини
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Любимая учительница
1. совершенная любовь
Любовные романы:
современные любовные романы
эро литература
8.73
рейтинг книги
Болотник 3
3. Болотник
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Пограничная река. (Тетралогия)
Пограничная река
Фантастика:
фэнтези
боевая фантастика
9.13
рейтинг книги
Жена со скидкой, или Случайный брак
Любовные романы:
любовно-фантастические романы
8.15
рейтинг книги
Возвышение Меркурия. Книга 7
7. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00