Чтож, вот и
решение данного вопроса.
Данное решение позволяет:
1. Выводить подструктуру выбранной структуры
2. Выводить подструктуру выбранной структуры, если выбран третий уровень вложенности.. Может и большее позволяет, но не факт.
Пришлось немного поковыряться конечно, но все же рад что обучился директиве <xsl:for-each..> Писал сам, но пожалуйста, пользуйтесь на здоровье:
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<xsl:template match="/document">
<xsl:variable name="csid" select="./structure/current_structure_id"/>
<xsl:variable name="pid" select="//structure[@id=$csid]/id_parent"/>
<xsl:variable name="ppid" select="//structure[@id=$pid]/id_parent"/>
<table border="0" style="width:99%">
<xsl:variable name="mparent_id">
<xsl:choose>
<xsl:when test="not($ppid=0) and not($pid=0)">
<xsl:variable name="csidb" select="//structure[@id=$csid]/id_parent"/>
<xsl:value-of disable-output-escaping="yes" select="/document/structure/structure[id_parent=$csidb]/id_parent" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="//structure[id_parent=$csid]/id_parent" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="sparent_id">
<xsl:choose>
<xsl:when test="not($ppid=0) and not($pid=0)">
<xsl:variable name="csidb" select="//structure[@id=$csid]/id_parent"/>
<xsl:value-of disable-output-escaping="yes" select="/document/structure/structure[@id=$csidb]/id_parent" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="//structure[@id=$csid]/id_parent"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="fif">
<xsl:choose>
<xsl:when test="$pid=0">
<xsl:value-of disable-output-escaping="yes" select="$csid" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="$sparent_id" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:for-each select="//structure[@id=$fif]/structure">
<xsl:if test="position() = 1">
<xsl:text disable-output-escaping="yes">
<tr>
</xsl:text>
</xsl:if>
<td align="left"><div class="submenu_item">
<xsl:if test="not($csid=@id)">
<a href="{link}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
</xsl:if>
<xsl:if test="$csid=@id">
<b class="link_active"><xsl:value-of disable-output-escaping="yes" select="name"/></b>
</xsl:if>
</div></td>
<xsl:if test="(position() mod 3)=0">
<xsl:text disable-output-escaping="yes">
</tr>
<tr>
</xsl:text>
</xsl:if>
<xsl:if test="position() = count(//structure[@id=$fif]/structure)">
<xsl:text disable-output-escaping="yes">
</tr>
</xsl:text>
</xsl:if>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
Конечно решение не оптимальное и можно кое-что подправить, но вот пока только такое.
Welcome!