2009-10-13 111 views
0

这是我的问题。我有一个“菜单”这样的组织:XSLT条件节点选择

<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> 

我期待像下面这样的结果,假设你在子子foo1页是。 如果我在Sub-Foo页面中,这也是我寻找的输出,因为我想显示当前分支的哪些子页面。 Other-Sub-Foo会显示Other-sub-sub-foo页面。

    • 子美孚
      • 子子foo1
      • 子子foo2的
      • 子子foo3
    • 其它 - 子符
  • 酒吧

这个想法是菜单将根据当前上下文建立自己。每个页面在树中被一个“菜单”属性引用,并且在我的XML中包含的每个“页面”上解析菜单树,以根据当前上下文构建正确的菜单。

回答

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> 
+0

内UL应该是李内;关闭li应该放在关闭xsl:if标签之后。 – 2009-10-13 13:21:12

+0

@jeff:ty,固定 – 2009-10-13 13:28:44

+0

哦。携带变量到menuitem模板的问题。 – 2009-10-13 18:03:04