parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Исправил

tema 11.05.2005 15:25

1. про уровни: используйте обычное дерево и XSL (ascendant)
что значит обычное?
2. call-template рулит.
попробовал без них, может с ними лучше?
6. Вы хоть парсером дерево генерите?
пока нет, почитал форум решил делать простым текстом, без всяких xnode, или я не так понял?

Испавленное решение в XML я начинающий, необходим вектор для правильного изучения XML+Parser.
#################################################################
$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