我尝试创建一个菜单,如果用户位于相应的页面或相应页面的子页面上,则会突出显示给定的选项卡。我是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。任何帮助或推动正确的方向表示赞赏!谢谢!
答案 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']">