Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 根据XSLT中的URL更改CSS类_Xml_Xslt_Menu - Fatal编程技术网

Xml 根据XSLT中的URL更改CSS类

Xml 根据XSLT中的URL更改CSS类,xml,xslt,menu,Xml,Xslt,Menu,我正在尝试制作一个菜单,我可以使用XSLT在站点上的所有页面上使用它 我有一个XSL: <xsl:template match="header/menu"> <div class="header__menu"> <xsl:apply-templates select="item"/> </div> </xsl:template> <xsl:template match="menu/item"> <

我正在尝试制作一个菜单,我可以使用XSLT在站点上的所有页面上使用它

我有一个XSL:

<xsl:template match="header/menu">
  <div class="header__menu">
    <xsl:apply-templates select="item"/> 
  </div>
</xsl:template>

<xsl:template match="menu/item">
  <div class="header__menu-item">
    <a class="link">
        <xsl:attribute name="href">
            <xsl:value-of select="../item/@url"/>
        </xsl:attribute>
        <xsl:value-of select="."/>
     </a>
  </div>
</xsl:template>
XML:

我想改变一个菜单项的CSS类,这取决于页面打开且没有链接时的页面活动类

我曾考虑尝试xsl:chooseconstruction并检查页面URL,但不知道如何做到这一点


有什么建议吗?提前感谢。

尽管您可以在XSLT中使用扩展方法来获取URL,但通过PHP将URL作为参数传递给XSLT可能会更容易。例如,请参阅本文档:

在XSLT本身中,将有一个如下定义的参数

<xsl:param name="url" />
就使用它而言,您可以使用xsl:choose,因此您的XSLT看起来像这样。在本例中,我将css类放在a标记上,但是如果您愿意,它可以很容易地放在包含div的标记上

<xsl:template match="menu/item">
  <div class="header__menu-item">
    <a class="link" href="{@url}">
     <xsl:attribute name="class">
        <xsl:choose>
           <xsl:when test="$url = @url">active</xsl:when>
           <xsl:otherwise>inactive</xsl:when>
        <xsl:choose>
      </xsl:attribute>
      <xsl:value-of select="."/>
    </a>
  </div>
</xsl:template>

另外,请注意在创建现有href属性时使用属性值模板。大括号{}表示要计算的表达式,而不是字面上的输出。

XSLT本身不知道页面URL,所以必须将当前URL作为参数传递?您当前如何调用XSLT来执行转换?例如,在PHP、ASP.Net、JavaScript等方面,我目前使用PHP。我在目录中有一个index.php文件,它调用一个xsl,该xsl导入header.xsl和其他内容,并为页面导入一个xml。谢谢Tim C。我只是还没有完全弄清楚如何将url传递到xsl参数。如果有人需要,我得到了关于在php中传递url的答案:
<xsl:template match="menu/item">
  <div class="header__menu-item">
    <a class="link" href="{@url}">
     <xsl:attribute name="class">
        <xsl:choose>
           <xsl:when test="$url = @url">active</xsl:when>
           <xsl:otherwise>inactive</xsl:when>
        <xsl:choose>
      </xsl:attribute>
      <xsl:value-of select="."/>
    </a>
  </div>
</xsl:template>