Технология XSLT
Шрифт:
<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"/>
</xsl:template>
<!-- Шаблон обработки категории-->
<xsl:template match="category">
<!-- Параметр, указывающий отступ -->
<xsl:param name="indent"/>
<!-- Выводим отступ -->
<xsl:value-of select="$indent"/>
<!-- Выводим информацию о категории в виде ссылки -->
<а href="#">
<!-- Перед названием категории выводим соответствующую иконку -->
<img height="11" width="11" border="0">
<xsl:choose>
<!--
| Если категория не содержит субэлементов,
| выводим иконку с точкой
+-->
<xsl:when test="not(*)">
<xsl:attribute name="src">images/dot.gif</xsl:attribute>
</xsl:when>
<!--
| Если категория принадлежит ветке выбранной категории,
| выводим иконку с минусом, что означает раскрытую ветку
+-->
<xsl:when test="count(.|$path)=count($path)">
<xsl:attribute name="src">images/minus.gif</xsl:attribute>
</xsl:when>
<!--
| Если категория не принадлежит ветке выбранной категории,
| выводим иконку с плюсом, что означает нераскрытую ветку
+-->
<xsl:otherwise>
<xsl:attribute name="src">images/plus.gif</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</img>
<!--
Поделиться:
Популярные книги
На границе империй. Том 8
12. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Проводник
2. Другая сторона
Фантастика:
боевая фантастика
рпг
7.41
рейтинг книги
Дракон с подарком
3. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
6.62
рейтинг книги
Князь Мещерский
3. Зауряд-врач
Фантастика:
альтернативная история
8.35
рейтинг книги
Последний попаданец
1. Последний попаданец
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Сколько стоит любовь
Любовные романы:
любовно-фантастические романы
6.22
рейтинг книги
Мужчина моей судьбы
2. Мужчина не моей мечты
Любовные романы:
любовно-фантастические романы
8.03
рейтинг книги
Адвокат Империи 2
2. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Третий. Том 2
2. Отпуск
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Охота на царя
2. Сыщик Его Величества
Детективы:
исторические детективы
8.68
рейтинг книги
(не) Желанная тень его Высочества
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Гарем на шагоходе. Том 1
1. Волк и его волчицы
Фантастика:
боевая фантастика
юмористическая фантастика
попаданцы
5.00
рейтинг книги
Черный дембель. Часть 5
5. Черный дембель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Измена. Возвращение любви!
3. Измены
Любовные романы:
современные любовные романы
5.00