簡體   English   中英

XSLT條件節點選擇

[英]XSLT conditional node selection

這是我的問題。 我有一個這樣組織的“菜單”:

<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”頁面。

  • oo
    • 子腳
      • Sub-sub-foo1
      • Sub-sub-foo2
      • Sub-sub-foo3
    • 其他子足
  • 酒吧

想法是菜單將根據當前上下文自行構建。 樹中的每個頁面都通過“菜單”屬性進行引用,並且在XML中包含的每個“頁面”中,我都會分析菜單樹以基於當前上下文構建正確的菜單。

您是否正在尋找這樣的東西:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM