Главная страница статей --> Хитрости при программировании php, заметки по базам данных

Отрисовка связанного дерева с помощью XSLT - как с умом использовать XSLT и XPath

Источник: realcoding.net

[2 страница]

Об авторе


Craig Berry работает главным архитектором в PortBlue Corporation (www.portblue.com), софтверной компании из Лос-Анджелеса, разрабатывающей продвинутую экспертную систему, основанную на технологии J2EE. Он работает в области проектирования и разработки ПО уже 20 лет, в самых различных областях, начиная от искусственного интеллекта и заканчивая распределенным потоковым видео.





<?xml version=1.0?>
<book title=XML For Fun and Profit>
<chapter title=A Day at the Beach with XML>
<section title=XML Surfing>
<section title=The Cowabunga entity/>
<section title=Gremmies and XPath/>
</section>
<section title=XML Sandcastles>
<section title=How Wet is the Sand?>
<section title=The Seashell Environment/>
<section title=Getting Kelp/>
</section>
<section title=The Tide and Long Term Stability Issues/>
</section>
</chapter>
<chapter title=The XML Circus>
<section title=Lions and Tigers and Parsers!/>
<section title=The W3C Standards Clown Car>
<section title=Loose and Strict Clown Compliance/>
</section>
</chapter>
</book>

<?xml version=1.0?>
<xsl:stylesheet version=1.0 xmlns:xsl=http://www.w3.org/1999/XSL/Transform>
<xsl:output
method=html
encoding=UTF-8
indent=yes
version=1.0
omit-xml-declaration=yes
media-type=text/html
standalone=yes
/>

<!-- Шаблоны для генерации текстового контента -->

<xsl:template match=/book>
<html>
<head>
<title>XML Book Outline</title>
<style type=text/css>
body { font-size: smaller }
div, img { border: 0px; margin: 0px; padding: 0px }
div.Node * { vertical-align: middle }
</style>
</head>
<body>
<b><xsl:value-of select=@title/></b>
<xsl:apply-templates mode=line/>
</body>
</html>
</xsl:template>

<!-- Рисуем каждую строку дерева -->

<xsl:template match=* mode=line>
<div class=Node>
<xsl:call-template name=graft/>
<xsl:apply-templates select=. mode=item/>
</div>
<xsl:apply-templates mode=line/>
</xsl:template>

<!-- Отображаем различные типы элементов -->

<xsl:template match=chapter mode=item>
<i><xsl:value-of select=@title/></i>
</xsl:template>

<xsl:template match=section mode=item>
<xsl:value-of select=@title/>
</xsl:template>

<!-- Шаблоны, используемые для генерации заборчика из различных соединителей -->

<xsl:template name=graft>
<!-- Отрисовываем картинки-соединители для всех предков -->
<xsl:apply-templates select=ancestor::* mode=tree/>

<!-- Рисуем коннектор для текущего узла -->
<xsl:choose>
<xsl:when test=following-sibling::*>
<img src=tree_tee.gif/>
</xsl:when>
<xsl:otherwise>
<img src=tree_corner.gif/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

<!-- Запрещаем отрисовку соединителя для корневого узла -->

<xsl:template match=book mode=tree/>

<!-- Рисуем соединители для всех остальных узлов -->

<xsl:template match=* mode=tree>
<xsl:choose>
<xsl:when test=following-sibling::*>
<img src=tree_bar.gif/>
</xsl:when>
<xsl:otherwise>
<img src=tree_spacer.gif/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

</xsl:stylesheet>

Контакты
Редакция:
[0.001]