Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
tema 11.05.2005 15:25
1. про уровни: используйте обычное дерево и XSL (ascendant)################################################################# $document[^xdoc::create{<?xml version="1.0" encoding="windows-1251" ?> <page> <title>Заголовок</title> <description>Описание</description> <menu> <menuitem link="/about/" name="О авторе"></menuitem> <menuitem link="/company/" name="О компании"></menuitem> <menuitem link="/info/" name="Информация"></menuitem> <menuitem link="/feedback/" name="Контакты"> <menu> <menuitem link="/feedback/phone/" name="Телефоны"> <menu> <menuitem link="/feedback/phone/1/" name="Отдел 1"> <menu> <menuitem selected="yes" link="/feedback/phone/1/1/" name="1"></menuitem> <menuitem link="/feedback/phone/1/2/" name="2"></menuitem> <menuitem link="/feedback/phone/1/3/" name="3"></menuitem> </menu> </menuitem> <menuitem link="/feedback/phone/2/" name="Отдел 2"></menuitem> <menuitem link="/feedback/phone/3/" name="Отдел 3"></menuitem> </menu> </menuitem> <menuitem link="/feedback/place/" name="Расположение"></menuitem> <menuitem link="/feedback/mail/" name="Форма"></menuitem> </menu> </menuitem> </menu> <content> text </content> </page>}] ################################################################# $style[^xdoc::create{<?xml version="1.0" encoding="windows-1251" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output indent="yes"/> <xsl:template match="/"> <html> <head> <title><xsl:value-of select="//title" /></title> <meta name="description"> <xsl:attribute name="content"><xsl:value-of select="//description" /></xsl:attribute> </meta> <meta name="keywords" content="" /> <link rel="stylesheet" type="text/css" href="xml.css"/> </head> <body> <table> <tr> <td width="20%" valign="top"> <xsl:apply-templates select="page/menu" /> </td> <td width="80%" valign="top"> <xsl:value-of select="//content" /> </td> </tr> </table> </body> </html> </xsl:template> <xsl:template match="//menu"> <!-- level 1 --> <xsl:if test="count(ancestor::menu)=0"> <table> <xsl:apply-templates select="menuitem" /> </table> </xsl:if> <!-- level 2 --> <xsl:if test="count(ancestor::menu)=1"> <xsl:apply-templates select="menuitem" /> </xsl:if> <!-- level 3 --> <xsl:if test="count(ancestor::menu)=2"> <xsl:apply-templates select="menuitem" /> </xsl:if> <!-- level 4 --> <xsl:if test="count(ancestor::menu)=3"> <xsl:apply-templates select="menuitem" /> </xsl:if> </xsl:template> <xsl:template match="//menuitem"> <!-- level 1 --> <xsl:if test="count(ancestor::menu)=1"> <xsl:if test="count(descendant-or-self::menuitem[@selected='yes'])=1"> <xsl:if test="@selected='yes'"> <tr><td><xsl:attribute name="bgcolor">green</xsl:attribute> --<a><xsl:attribute name="href"><xsl:value-of select="@link" /></xsl:attribute><xsl:value-of select="@name" /></a></td></tr> </xsl:if> <xsl:if test="not(@selected)"> <tr><td><xsl:attribute name="bgcolor">red</xsl:attribute> --<a><xsl:attribute name="href"><xsl:value-of select="@link" /></xsl:attribute><xsl:value-of select="@name" /></a></td></tr> </xsl:if> <xsl:apply-templates match="menu"/> </xsl:if> <xsl:if test="count(descendant-or-self::menuitem[@selected='yes'])=0"> <tr><td><xsl:attribute name="bgcolor">blue</xsl:attribute> --<a><xsl:attribute name="href"><xsl:value-of select="@link" /></xsl:attribute><xsl:value-of select="@name" /></a></td></tr> </xsl:if> </xsl:if> <!-- level 2 --> <xsl:if test="count(ancestor::menu)=2"> <xsl:if test="count(descendant-or-self::menuitem[@selected='yes'])=1"> <xsl:if test="@selected='yes'"> <tr><td><xsl:attribute name="bgcolor">green</xsl:attribute> ----<a><xsl:attribute name="href"><xsl:value-of select="@link" /></xsl:attribute><xsl:value-of select="@name" /></a></td></tr> </xsl:if> <xsl:if test="not(@selected)"> <tr><td><xsl:attribute name="bgcolor">red</xsl:attribute> ----<a><xsl:attribute name="href"><xsl:value-of select="@link" /></xsl:attribute><xsl:value-of select="@name" /></a></td></tr> </xsl:if> <xsl:apply-templates match="menu"/> </xsl:if> <xsl:if test="count(descendant-or-self::menuitem[@selected='yes'])=0"> <tr><td><xsl:attribute name="bgcolor">blue</xsl:attribute> ----<a><xsl:attribute name="href"><xsl:value-of select="@link" /></xsl:attribute><xsl:value-of select="@name" /></a></td></tr> </xsl:if> </xsl:if> <!-- level 3 --> <xsl:if test="count(ancestor::menu)=3"> <xsl:if test="count(descendant-or-self::menuitem[@selected='yes'])=1"> <xsl:if test="@selected='yes'"> <tr><td><xsl:attribute name="bgcolor">green</xsl:attribute> ------<a><xsl:attribute name="href"><xsl:value-of select="@link" /></xsl:attribute><xsl:value-of select="@name" /></a></td></tr> </xsl:if> <xsl:if test="not(@selected)"> <tr><td><xsl:attribute name="bgcolor">red</xsl:attribute> ------<a><xsl:attribute name="href"><xsl:value-of select="@link" /></xsl:attribute><xsl:value-of select="@name" /></a></td></tr> </xsl:if> <xsl:apply-templates match="menu"/> </xsl:if> <xsl:if test="count(descendant-or-self::menuitem[@selected='yes'])=0"> <tr><td><xsl:attribute name="bgcolor">blue</xsl:attribute> ------<a><xsl:attribute name="href"><xsl:value-of select="@link" /></xsl:attribute><xsl:value-of select="@name" /></a></td></tr> </xsl:if> </xsl:if> <!-- level 4 --> <xsl:if test="count(ancestor::menu)=4"> <xsl:if test="count(descendant-or-self::menuitem[@selected='yes'])=1"> <xsl:if test="@selected='yes'"> <tr><td><xsl:attribute name="bgcolor">green</xsl:attribute> --------<a><xsl:attribute name="href"><xsl:value-of select="@link" /></xsl:attribute><xsl:value-of select="@name" /></a></td></tr> </xsl:if> <xsl:if test="not(@selected)"> <tr><td><xsl:attribute name="bgcolor">red</xsl:attribute> --------<a><xsl:attribute name="href"><xsl:value-of select="@link" /></xsl:attribute><xsl:value-of select="@name" /></a></td></tr> </xsl:if> <xsl:apply-templates match="menu"/> </xsl:if> <xsl:if test="count(descendant-or-self::menuitem[@selected='yes'])=0"> <tr><td><xsl:attribute name="bgcolor">blue</xsl:attribute> --------<a><xsl:attribute name="href"><xsl:value-of select="@link" /></xsl:attribute><xsl:value-of select="@name" /></a></td></tr> </xsl:if> </xsl:if> </xsl:template> </xsl:stylesheet>}] ################################################################################## $transformedDoc[^document.transform[$style]] $html[^transformedDoc.string[$.method[html]]] #<pre>^taint[html][$html]</pre> $html