Спасибо за ваши ответы. К сожалению, ваш код был не совсем тем, что мне было нужно (скорее всего, из-за сложной природы того, что мне нужно, и моей неспособности объяснить мои требования), но благодаря вашему примеру кода я получил более глубокое понимание XSL- T и создал следующее:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />
<xsl:template match="/">
<div class="SideMenu">
<!-- Loop through all L1 nodes -->
<xsl:for-each select="Root/root/node">
<xsl:if test="@enabled='1'" >
<xsl:if test="@breadcrumb='1'" >
<!-- Find active root node-->
<!-- L0 nodes: Don't ever show (These are the horizontal tabs) -->
<!-- Always show all children: L1 nodes -->
<xsl:apply-templates select="child::node()[@url]" mode="BaseNode" ></xsl:apply-templates>
</xsl:if>
</xsl:if>
</xsl:for-each>
</div>
</xsl:template>
<!-- Template: Base node -->
<xsl:template match="node" mode="BaseNode" >
<xsl:choose>
<xsl:when test="@breadcrumb='0'" >
<!-- Non-breadcrumb L1 node -->
<xsl:apply-templates select="." mode="NonShadedNode" ></xsl:apply-templates>
</xsl:when>
<xsl:when test="@breadcrumb='1'" >
<!-- Child which is part of hierarchy -->
<xsl:apply-templates select="." mode="ShadedNode" ></xsl:apply-templates>
<!-- Drill down through hierarchy of active nodes-->
<xsl:for-each select="descendant::node()[@url]">
<xsl:if test="@breadcrumb='1'" >
<!-- Is this the last node? If so, show children -->
<xsl:choose>
<xsl:when test="child::node()[@url]">
<!-- Not last node -->
<xsl:apply-templates select="." mode="ShadedNode" ></xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<!-- Last node: loop through all siblings -->
<!-- THIS LOOP DOESN'T WORK CORRECTLY -->
<xsl:for-each select="preceding-sibling::node()" >
<xsl:apply-templates select="." mode="ShadedNode" ></xsl:apply-templates>
</xsl:for-each>
<xsl:apply-templates select="." mode="SelectedNode" ></xsl:apply-templates>
<xsl:for-each select="following-sibling::node()" >
<xsl:apply-templates select="." mode="ShadedNode" ></xsl:apply-templates>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:for-each>
</xsl:when>
</xsl:choose>
</xsl:template>
<!-- Template: Non-shaded node -->
<xsl:template match="node" mode="NonShadedNode" >
<a>
<xsl:attribute name="href">
<xsl:value-of select="@url"/>
</xsl:attribute>
<xsl:attribute name="style">
padding-left:<xsl:value-of select="@depth * 10"/>
</xsl:attribute>
<xsl:value-of select="@text"/>
</a>
</xsl:template>
<!-- Template: Shaded node -->
<xsl:template match="node" mode="ShadedNode" >
<a class="SideMenu_Shaded">
<xsl:attribute name="href">
<xsl:value-of select="@url"/>
</xsl:attribute>
<xsl:attribute name="style">
padding-left:<xsl:value-of select="@depth * 10"/>
</xsl:attribute>
<xsl:value-of select="@text"/>
</a>
</xsl:template>
<!-- Template: Selected node -->
<xsl:template match="node" mode="SelectedNode" >
<a class="SideMenu_Selected">
<xsl:attribute name="style">
padding-left:<xsl:value-of select="@depth * 10"/>
</xsl:attribute>
<xsl:value-of select="@text"/>
</a>
</xsl:template>
</xsl:stylesheet>
Это именно то, что мне нужно, кроме ЭТОГО НЕ РАБОТАЕТ ПРАВИЛЬНО , который по какой-то причине также показывает узлы, которые разделяют братьев и сестер ... Я сейчас на это смотрю и надеюсь небольшая ошибка в моем коде.
Хотя, если вы можете определить проблему, пожалуйста, дайте мне знать! :)
Вот отрендеренный HTML из XSL-T:
<div class="SideMenu"><a href="/Home/Tester.aspx" style="
 padding-left:10">Tester </a><a class="SideMenu_Shaded" href="/Home/ChiefConstablesArea.aspx" style="
 padding-left:10">Chief Constables Area</a>
Chief Constables Area
Chief Constables Area
<a class="SideMenu_Shaded" href="/Home/ChiefConstablesArea/ChiefsFocusGroups.aspx" style="
 padding-left:20">Chief's Focus Groups</a>
<a class="SideMenu_Shaded" href="/Home/ChiefConstablesArea/AbouttheChief.aspx" style="
 padding-left:20">About the Chief</a>
<a class="SideMenu_Shaded" href="/Home/ChiefConstablesArea/ChiefsOfficerGroup.aspx" style="
 padding-left:20">Chief's Officer Group</a>
<a class="SideMenu_Selected" style="
 padding-left:20">Chief's Messages</a>
<a class="SideMenu_Shaded" href="/Home/ChiefConstablesArea/ForceAwardsScheme.aspx" style="
 padding-left:20">Force Awards Scheme</a>
<a href="/Home/ActiveForumLitetrial.aspx" style="
 padding-left:10">Active Forum Lite trial</a></div>