2009-10-13 161 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