这是我的问题。我有一个像这样组织的“菜单”:
<menutree>
<menuitem name="Foo">
<menuitem name="Sub-Foo">
<menuitem name="Sub-sub-foo1"/>
<menuitem name="Sub-sub-foo2"/>
<menuitem name="Sub-sub-foo3"/>
</menuitem>
<menuitem name="Other-Sub-Foo">
<menuitem name="Other-Sub-sub-foo1"/>
<menuitem name="Other-Sub-sub-foo2"/>
<menuitem name="Other-Sub-sub-foo3"/>
</menuitem>
</menuitem>
<menuitem name="Bar">
<menuitem name="Sub-Bar">
<menuitem name="Sub-sub-Bar1"/>
<menuitem name="Sub-sub-Bar2"/>
<menuitem name="Sub-sub-Bar3"/>
</menuitem>
</menuitem>
</menutree>
我正在寻找类似以下的结果,假设您在 Sub-sub-foo1 页面中。 如果我在Sub-Foo页面中,这也是我寻找的输出,因为我想显示我当前分支的哪些子页面。 Other-Sub-Foo 会显示Other-sub-sub-foo页面。
这个想法是菜单将根据当前上下文自行构建。每个页面在树中通过“menu”属性引用,并且在我的XML中包含的每个“页面”中,我解析菜单树以基于当前上下文构建正确的菜单。
答案 0 :(得分:1)
你在寻找这样的东西:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="currentPage">Sub-sub-foo1</xsl:param>
<xsl:template match="/">
Current page: <xsl:value-of select="$currentPage" /><br />
<ul>
<xsl:choose>
<xsl:when test="//menuitem[@name=$currentPage]">
<xsl:apply-templates select="//menuitem[@name=$currentPage]/.." />
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates />
</xsl:otherwise>
</xsl:choose>
</ul>
</xsl:template>
<xsl:template match="menuitem">
<li>
<xsl:choose>
<xsl:when test="@name=$currentPage">
<b><xsl:value-of select="@name" /></b>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@name" />
</xsl:otherwise>
</xsl:choose>
<xsl:if test="menuitem">
<ul>
<xsl:apply-templates />
</ul>
</xsl:if>
</li>
</xsl:template>
</xsl:stylesheet>