xsl:if test"如果页面是另一页的后代或自我。"

时间:2012-01-10 18:31:12

标签: xml xslt

我尝试创建一个菜单,如果用户位于相应的页面或相应页面的子页面上,则会突出显示给定的选项卡。我是XSL的新手,需要编辑一些工作的东西。进行以下设置:

sample / mock xml

   <Page ID="x44">
     <Page ID="x52" />
        <Page ID="x51" />
        <Page ID="x50" />
     </Page>
    <Page ID="x46">
     <Page ID="x22" />
        <Page ID="x21" />
        <Page ID="x20" />
   </Page>

这是xsl

 <li>
    <xsl:attribute name="class" >
             <xsl:if test="descendant-or-self::*[$pageid = 'x44']">
                <xsl:text>active</xsl:text>
             </xsl:if>
            </xsl:attribute>

这会让x44突出显示,但没有一个孩子:52,51,50。任何帮助或推动正确的方向表示赞赏!谢谢!

2 个答案:

答案 0 :(得分:0)

虽然提问'Dimitre提到的问题不完整,但我也找不到该属性的元素 CLASS !!我假设你想要一个像这样的输出:

<test class="active" />

然后我准备了一个代码:

  <xsl:template match="/">
  <xsl:element name="test">
  <xsl:attribute name="class" >
    <xsl:if test="descendant-or-self::*[@ID = 'x44']">
      <xsl:text>active</xsl:text>
    </xsl:if>
  </xsl:attribute>
  </xsl:element>
  </xsl:template>

使用@作为属性,而不是*,您可以使用元素名称“页面

代码行<xsl:if test="descendant-or-self::*[@ID = 'x44']">根据if 具有属性ID ='x44'的任何元素返回false。

如果您对答案不满意,请告诉我们所需的输出。

答案 1 :(得分:0)

您的xsl:if测试只会传递自己拥有x44或后代的元素;您的x52元素与此不匹配,x44是父/祖先,而不是后代。

你可能想要这个:

<xsl:if test="ancestor-or-self::*[$pageid = 'x44']">

或可能

<xsl:if test="ancestor-or-self::Page[@ID = 'x44']">