Xml 根据XSLT中的URL更改CSS类
我正在尝试制作一个菜单,我可以使用XSLT在站点上的所有页面上使用它 我有一个XSL: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"> <
<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>