我正在使用 CMS,它允许使用 XSLT 进行导航。该设计规定了具有三个不同级别的导航,并且每个级别都有不同的标记。“不费吹灰之力”,乐观的开发人员说,“我会和 XSLT 一起破解它。我的意思是,它有多难?”。这是我的第一个错误。
让我们切入正题:
XSLT
<xsl:template match="/NavigationTree">
<xsl:if test="count(//Page) > 0">
<ul class="floatLeft">
<xsl:apply-templates select="Page">
<xsl:with-param name="depth" select="1"/>
</xsl:apply-templates>
</ul>
</xsl:if>
</xsl:template>
<xsl:template match="//Page">
<xsl:param name="depth"/>
<li>
<xsl:if test="count(Page)">
<ul>
<xsl:apply-templates select="Subpage">
<xsl:with-param name="depth" select="$depth+1"/>
</xsl:apply-templates>
</ul>
</xsl:if>
</li>
</xsl:template>
<xsl:template match="//Subpage">
<xsl:param name="depth"/>
<li class="test">
</li>
</xsl:template>
我的想法是,第一级应该使用“页面”模板,所有子页面都应该使用“子页面”模板。相反,第一级中第二个之后的所有项目都使用“子页面”模板。如果我删除该模板,它会正确显示整个第一层——但没有子层。我没有受过教育的猜测是页面模板中的 if 语句有问题。
那有意义吗?
我比我的母语口语更了解 HTML,但在 XSLT 方面我还是个新手。我什至不知道要搜索什么,所以如果这个问题已经在其他地方得到解决,请指导我 O' 强大的智者。