代码之家  ›  专栏  ›  技术社区  ›  Olivier Tremblay

XSLT条件节点选择

  •  0
  • Olivier Tremblay  · 技术社区  · 15 年前

    这是我的问题。我有一个这样组织的“菜单”:

    <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 页。 这也是我在Subfoo页面中寻找的输出,因为我想显示当前分支的子页面。 其他子公司 将显示其他子foo页面。

      • 副foo
        • 分次足1
        • 亚亚O2
        • 亚亚氧化钇
      • 其他子公司
  • 酒吧
  • 其思想是菜单将根据当前上下文自行构建。树中的每个页面都由“menu”属性引用,在XML中包含的每个“page”处,我分析菜单树,以基于当前上下文构建正确的菜单。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Rubens Farias    15 年前

    你在找这样的东西吗?

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