【发布时间】:2012-09-24 05:33:42
【问题描述】:
我正在使用使用 VS.net 2010 创建的 web.sitemap 以及 XSLT 来创建一个干净的 CSS 菜单。
我已经从 Cyotec 修改了 xslt 以去除第一个节点,但是到目前为止我无法弄清楚如何根据用户的角色在其中搜索以仅显示链接。
XSLT 如下:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:map="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" exclude-result-prefixes="map">
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<xsl:template name="mapNode" match="/">
<ul id="main-menu">
<xsl:apply-templates select="*"/>
</ul>
</xsl:template>
<xsl:template match="/*/*">
<xsl:apply-templates select="*"/>
</xsl:template>
<xsl:template match="map:siteMapNode">
<xsl:if test="/siteMap/SiteMapNode[@roles != 'Admin']">
<li>
<a href="{substring(@url, 2)}" title="{@description}">
<xsl:value-of select="@title"/>
</a>
<xsl:if test="map:siteMapNode">
<xsl:call-template name="mapNode"/>
</xsl:if>
</li>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
XML 如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="~/" title="" description="Anon" roles="*">
<siteMapNode url="~/anon.aspx" title="Anon" description="Anon" roles="*" />
<siteMapNode url="~/admin1.aspx" title="Admin1" description="Admin Only" roles="Admin"/>
<siteMapNode url="~/admin2.aspx" title="Admin2" description="Admin Only" roles="Admin">
<siteMapNode url="~/admin3.aspx" title="Admin3" description="Admin Only" roles="Admin"/>
</siteMapNode>
</siteMapNode>
</siteMap>
我只想输出角色 != Admin 的 url 标题和描述
没有搜索一切正常。
有没有人能够阐明“if”功能,或者提出更好的方法来实现这一点?
提前致谢
【问题讨论】:
-
你可以试试
<xsl:if test="not(/siteMap/SiteMapNode/@roles = 'Admin')">或者更好的<xsl:temlate match="map:siteMapNode[not(@role = 'Admin')]">