Чтение онлайн

ЖАНРЫ

Технология XSLT

Валиков Алексей Н.

Шрифт:

| Выводим неразрывный пробел.

|   в Unicode соответствует  

+-->

<xsl:text>&#xA0;</xsl:text>

<!-- Выводим название категории -->

<xsl:value-of select="@title"/>

</a>

<br/><xsl:text>&#xA;</xsl:text>

<!--

| Если категория
принадлежит раскрываемой ветке,

| обрабатываем ее подкатегории

+-->

<xsl:if test="count(.|$path)=count($path)">

<xsl:apply-templates select="category">

<!-- Увеличиваем отступ на три пробела -->

<xsl:with-param name="indent"

select="concat($indent,'&#xA0;&#xA0;&#xA0;')"/>

</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 + "'";

// Выполняем преобразование

strResult = source.transformNode(stylesheet);

// Обновляем страницу

result.innerHTML = strResult;

}

//-->

</script>

 </head>

 <body onload="init">

<!-- Объект, представляющий входящий документ -->

<object

Поделиться с друзьями: