Вход/Регистрация
Технология XSLT
вернуться

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

Шрифт:

Рис. 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="Процессоры"/>

<category title="Материнские платы"/>

 </category>

 <category title="Расходные материалы">

<category title="Картриджи">

<category title="Картриджи для плоттеров"/>

<category title="Картриджи для принтеров"/>

</category>

<category title="Тонеры"/>

<category title="Бумага"/>

 </category>

</catalog>

При отображении этого дерева мы будем раскрывать только определенную выбранную ветвь категорий. Скажем, если пользователь выбрал категорию "Расходные материалы", показывать информацию о компьютерах мы ему не будем. Иными словами, мы будем показывать только те категории, которые являются надкатегориями выбранной. Для того чтобы сделать это как можно эффективнее, мы выполним следующие шаги.

□ При помощи ключа и уникального идентификатора, сгенерированного функцией

generate-id
, мы найдем в дереве требуемую категорию и присвоим ее переменной
$category
.

□ Воспользовавшись осью

ansector-or-self
, мы найдем все надкатегории данной, то есть все категории, которые прямо или косвенно содержат найденную. Путь выборки будет иметь вид
$category/ancestor-or-self::category
. Найденное множество мы присвоим переменной
$path
.

□ При обработке каждой из категорий мы будем обрабатывать ее подкатегории только в том случае, если она является надкатегорией выбранной; иначе говоря — только в том случае, когда ее узел принадлежит множеству узлов

$path
. Проверять это мы будем при помощи условия
count(.|$path)=count($path)
.

Искомое преобразование в итоге запишется в виде.

Листинг 9.7. Преобразование обрабатывающее наш каталог

<?xml version="1.0" encoding="windows-1251"?>

<xsl:stylesheet

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <!-- Выводим документ в формате html и кодировке windows-1251 -->

 <xsl:output method="html" encoding="windows-1251"/>

 <!--

| Переменная, которая содержит уникальный

| идентификатор выбранного узла дерева

+-->

 <xsl:param name="current" select="''"/>

 <!-- Определение ключа категории -->

 <xsl:key name="cat" match="category" use="generate-id(.)"/>

 <!-- Находим текущую категорию -->

 <xsl:variable name="category" select="key('cat',$current)"/>

 <!--

| Находим надкатегории текущей категории, узлы которых

| мы будем раскрывать в дереве

+-->

 <xsl:variable name="path"

select="$category/ancestor-or-self::category"/>

 <!-- Шаблон обработки каталога -->

 <xsl:template match="catalog">

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

  • Читать дальше
  • 1
  • ...
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: