parser

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

 

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

Offtopic: Поможите с XSLT

Denis Popov 16.12.2003 18:49 / 16.12.2003 19:00

Извиняюсь за оффтопик, но...

Есть вот такой xml (для построения структуры сайта) :
<?xml version="1.0" encoding="WINDOWS-1251" standalone="no"?>
<navigation> 
	<page url="/" name="Главная страница" parent-id="0" id="1">
	<window_name>Главная страница</window_name>
	<url>/</url>
	<is_show_on_site_map>1</is_show_on_site_map>
	<is_show_in_menu>1</is_show_in_menu>

             <page url="/contacs" name="Контакты" parent-id="1" id="2">
	     <window_name>Контакты</window_name>
	     <url>/contacs</url>
	     <is_show_on_site_map>1</is_show_on_site_map>
	     <is_show_in_menu>1</is_show_in_menu>
	
	
	
	        <page url="/service" name="Услуги" parent-id="2" id="7">
	        <window_name>Услуги</window_name>
	        <url>/service</url>
	        <is_show_on_site_map>1</is_show_on_site_map>
	        <is_show_in_menu>1</is_show_in_menu>
	        </page>
	
             </page>
	
	     <page url="/forum" name="Форум" parent-id="1" id="3">
	     <window_name>Форум</window_name>
	     <url>/forum</url>
	     <is_show_on_site_map>1</is_show_on_site_map>
	     <is_show_in_menu>1</is_show_in_menu>
	     </page>
	
	     <page url="/press" name="Пресс-служба" parent-id="1" id="4">
	     <window_name>Пресс-служба</window_name>
	     <url>/press</url>
	     <is_show_on_site_map>1</is_show_on_site_map>
	     <is_show_in_menu>1</is_show_in_menu>
	
	
	          <page url="/news" name="Новости" parent-id="4" id="5">
	          <window_name>Новости</window_name>
	          <url>/news</url>
	          <is_show_on_site_map>1</is_show_on_site_map>
	          <is_show_in_menu>1</is_show_in_menu>
	          </page>
	
             </page>
	
	     <page url="/about" name="О конторе" parent-id="1" id="6">
	     <window_name>О конторе</window_name>
	     <url>/about</url>
	     <is_show_on_site_map>0</is_show_on_site_map>
	     <is_show_in_menu>0</is_show_in_menu>
	
	</page>
	
        </page>

</navigation>
Таким шаблоном создаем визуальное дерево :
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="windows-1251" indent="yes"/>

<xsl:template match="navigation">
 <div style="padding:10">
  <xsl:apply-templates select="/navigation/page[@parent-id = 0]" />
 </div>
</xsl:template>


<xsl:template match="/navigation/page[@parent-id = 0]">
  <div>
   <xsl:attribute name="style">padding-left: <xsl:value-of select="count(ancestor::page)*2"/> em</xsl:attribute>
    <li/>
    <a href="{url}">
     <xsl:value-of select="@name" />
    </a>
  </div>
 <xsl:apply-templates select="page[@parent-id != 0]" />
</xsl:template>


<xsl:template match="//page[@parent-id != 0]">
 <div>
  <xsl:attribute name="style">padding-left: <xsl:value-of select="count(ancestor::page)*2"/> em</xsl:attribute>
  <li/>
    <a href="{url}">
     <xsl:value-of select="@name" />
    </a>
  </div>
 <xsl:apply-templates select="page[@parent-id != 0]"/>
</xsl:template>

</xsl:stylesheet>
Но у меня неполучаеться сделать самое главное - чтобы строились ссылки по вложенности.
(чтобы потом можно было менять родителя и сразу же менялись дети)

Тоесть в данном случае выходит :
/press/
и
/news/

А нужно
/press/
и
/press/news/

C XSL стал мучиться недавно и поэтому немогу никак сообразить... может есть какое другое решение (более правильное)?

Заранее спасибо