Технология XSLT
Шрифт:
| Выводим неразрывный пробел.
|   в Unicode соответствует
+-->
<xsl:text> </xsl:text>
<!-- Выводим название категории -->
<xsl:value-of select="@title"/>
</a>
<br/><xsl:text>
</xsl:text>
<!--
|
Если категория принадлежит раскрываемой ветке,
| обрабатываем ее подкатегории
+-->
<xsl:if test="count(.|$path)=count($path)">
<xsl:apply-templates select="category">
<!-- Увеличиваем отступ на три пробела -->
<xsl:with-param name="indent"
select="concat($indent,'   ')"/>
</xsl:apply-templates>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Теперь осталось лишь только создать страницу, которая при помощи JavaScript и MSXML будет выполнять преобразования и выводить результат.
Для того чтобы воспользоваться возможностями MSXML, мы включим в нашу страницу два объекта:
<!-- Объект, представляющий входящий документ -->
<object
id="source"
width="0"
height="0"
classid="clsid:f5078f32-c551-11d3-89b9-0000f81fe221">
<param name="async" value="false">
<param name="validateOnParse" value="false">
</object>
<!-- Объект, представляющий документ преобразования -->
<object
id="stylesheet"
width="0"
height="0"
classid="clsid:f5078f32-c551-11d3-89b9-0000f81fe221">
<param name="async" value="false">
<param name="validateOnParse" value="false">
</object>
"Магический" код
clsid:f5078f32-c551-11d3-89b9-0000f81fe221
, который присутствует в тегах обоих объектов, на самом деле не что иное, как уникальный идентификатор библиотеки MSXML 3.0, которую мы и будем использовать для выполнения преобразования. Итак, код нашей HTML- страницы будет выглядеть следующим образом. Листинг 9.8. Код HTML-страницы
<html>
<head>
<meta
http-equiv="Content-Type"
content="text/html; charset=windows-1251" />
<style type="text/css">
body {font-family:Tahoma,Verdana,Arial,sans-serif; font-size:14px}
a:link {COLOR:#990000; BACKGROUND: #ffffff; TEXT-DECORATION: none}
a:hover {BACKGROUND: #dddddd; TEXT-DECORATION: none}
a:visited {COLOR: #990000; TEXT-DECORATION: none}
</style>
<script language="JavaScript">
<!--
//
Объявляем глобальные переменные
// Входящий документ
var source;
// Преобразование
var stylesheet;
// Результат
var result;
// Функция, выполняющая действия по инициализации
function init {
// Инициализируем ссылку на объект входящего документа
source = document.all['source'];
// Загружаем входящий документ
source.load('source.xml');
// Инициализируем ссылку на объект преобразования
stylesheet = document.all['stylesheet'];
// Загружаем документ преобразования
stylesheet.load('stylesheet.xsl');
// Находим элемент, в который мы будем выводить
// результат обработки
result = document.all['result'];
}
// Функция, выполняющая "раскрытие"
//определенной ветки дерева категорий.
function expand(id) {
// Получаем ссылку на атрибут select
// объявления параметра current
var attSelect = stylesheet.selectSingleNode(
"/xsl:stylesheet/xsl:param[@name='current']/@select");
// Изменяем значение этого атрибута. Одинарные кавычки необходимы
// для того, чтобы новое значение воспринималось как литерал.
attSelect.nodeValue = "'" + id + "'";
Поделиться:
Популярные книги
Мастер 6
6. Мастер
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Инкарнатор
1. Стеллар
Фантастика:
боевая фантастика
рпг
7.30
рейтинг книги
Час Презрения
4. Ведьмак
Фантастика:
фэнтези
9.29
рейтинг книги
Убивать чтобы жить 5
5. УЧЖ
Фантастика:
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Зауряд-врач
1. Зауряд-врач
Фантастика:
альтернативная история
8.64
рейтинг книги
Любимая учительница
1. совершенная любовь
Любовные романы:
современные любовные романы
эро литература
8.73
рейтинг книги
Прометей: повелитель стали
3. Прометей
Фантастика:
фэнтези
7.05
рейтинг книги
Возвышение Меркурия. Книга 14
14. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Тайны ордена
6. Девятый
Фантастика:
боевая фантастика
попаданцы
7.48
рейтинг книги
Камень. Книга вторая
2. Камень
Фантастика:
фэнтези
8.52
рейтинг книги
Флеш Рояль
Детективы:
триллеры
7.11
рейтинг книги
Шесть принцев для мисс Недотроги
3. Мисс Недотрога
Фантастика:
фэнтези
7.92
рейтинг книги
Звездная Кровь. Изгой
1. Звездная Кровь. Изгой
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Последняя Арена 6
6. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00