16.10 嵌套站点地图文件
不需要把所有的站点导航信息都放在一个web.sitemap文件中。实际上,可以把这些信息分别放在多个.sitemap文件中,再把它们合并到一个.sitemap文件中,这称为嵌套.sitemap文件。
例如,假定使用程序清单16-1中的站点地图文件,我们要在Entertainment区添加大量的站点导航信息。此时就可以把所有的新信息放在当前的web.sitemap文件中,将所有的Entertainment链接放在另一个站点地图文件中,在主站点地图文件中引用Entertainment文件即可。
嵌套站点地图文件是很简单的。创建一个新的.sitemap文件,命名为Entertainment. Sitemap,把这个文件放在应用程序中。程序清单16-37中显示了该文件。
程序清单16-37 Entertainment.sitemap
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="Entertainment.aspx" title="Entertainment"
description="The Entertainment Page">
<siteMapNode url="Movies.aspx" title="Movies"
description="The Latest in Movies" />
<siteMapNode url="Fashion.aspx" title="Fashion"
description="The Latest in Fashion" />
</siteMapNode>
</siteMap>
可以把Entertainment.sitemap文件放在主站点地图文件所在的根目录中。现在,以程序清单16-1中的站点地图文件为基础,在列表的底部进行如程序清单16-38所示的修改。
程序清单16-38 给Web.sitemap添加新内容
<siteMapNode siteMapFile="Entertainment.sitemap" />
这里没有使用标准的url、title和description属性,只是使用siteMapFile属性指向在这个主站点地图文件中包含的另一个站点地图文件。运行这个页面,结果如图16-38所示。

图 16-38
安全补偿功能是根据用户在角色管理系统中的角色自动修改显示给用户的自动导航信息的理想方式。
嵌套站点地图文件的另一个方法是在站点地图提供程序模型定义中建立第二个提供程序,再使用<siteMapNode>元素中的provider属性引用该声明。为此,应先在web.config文件中添加一个新的站点地图提供程序引用,如程序清单中16-39所示。
程序清单16-39 在同一个Web.sitemap文件中使用另一个提供程序
<configuration>
<system.web>
<siteMap>
<providers>
<add siteMapFile="Entertainment.sitemap" name="AspNetXmlSite MapProvider2"
type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</siteMap>
</system.web>
</configuration>
在这段代码中,定义了第二个提供程序。这并不表示必须在<provider>段中使用<clear/>元素,而只需定义一个新名称的提供程序即可。本例中的提供程序名是AspNetXmlSiteMapProvider2。另外,在这个提供程序定义中,siteMapFile属性用于指向要使用的站点地图文件名。
之后,就可以在Web.sitemap文件中使用<siteMapNode>元素中的provider属性引用该声明。要以这种方式添加Entertainment.sitemap文件,<siteMapNode>元素应如程序清单16-40中所示。
程序清单16-40 在Web.sitemap文件中使用第二个提供程序
<siteMapNode provider="AspNetXmlSiteMapProvider2" />
这也会得到如图16-38所示的结果。使用provider属性除了提供嵌套站点地图文件的另一种方式之外,还获得了强大的功能。如果建立了一个新的站点地图提供程序,从另一个非XML文件的数据源中提取站点地图导航信息,就可以在主Web.sitemap文件中混合这些结果。最终结果中的数据可以来自两个或多个完全不同的数据源。







