| Новости | 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