Xml xsl:if-test";如果页面是另一页面的后代或自身……”;

Xml xsl:if-test";如果页面是另一页面的后代或自身……”;,xml,xslt,Xml,Xslt,我试图创建一个菜单,如果用户位于相应页面或相应页面的子页面上,则会突出显示给定选项卡。我是XSL新手,需要为工作编辑一些内容。提供以下设置: 示例/模拟xml <Page ID="x44"> <Page ID="x52" /> <Page ID="x51" /> <Page ID="x50" /> </Page> <Page ID="x46"> &l

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

示例/模拟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。任何帮助或推动在正确的方向是感激的!谢谢

    尽管问题如hon'Dimitre所述不完整,但我也找不到该属性的元素!!我假设您想要这样的输出:

    <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>
    
    
    积极的
    
    使用@作为属性,可以使用元素名“页面”,而不是*

    代码行
    根据属性ID='x44'的任何元素的if返回true或false


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

    您的
    xsl:if
    测试将只通过本身具有
    x44
    的元素或具有该属性的后代的元素;您的
    x52
    元素与此不匹配,
    x44
    是父/祖先,而不是后代

    你可能想要这个:

    或者可能


    您需要提供所需的确切输出——人们不喜欢猜测和浪费时间。