如何遍历 SharePoint 网站的所有网站和子网站

How to loop through all webs and sub webs of a SharePoint Web

我正在尝试遍历一个网站下的所有网站和这些网站的子网站。

我的父网站

http://EXAMPLE.com/parentweb(这是一个子站点,不是根站点)

子网 http://example.com/parentweb/subweb(这是可能有也可能没有子网的子网之一)

我唯一尝试的是转到网站集并遍历所有网站,这是一个更长的过程,因为我知道唯一需要检查的子网站。我的网站集有多个子网站。我不想遍历所有订阅站点。

此代码有效,但它需要花费大量时间,并且循环遍历所有不需要检查的子站点

     using(SPSite site = new SPSite(“http://myserver/mysitecol”) 
           { 
               foreach(SPWeb web in site.AllWebs) 
               {
               }
           } 

您可以使用 SPWeb 对象的 .Webs 属性 访问其 直接 子站点。

using(SPSite site = new SPSite("http://myserver/mysitecol") 
{ 
    using(SPWeb parentweb = site.OpenWeb("subweb/subweb") 
    {
        foreach(SPWeb web in parentweb.Webs)
        {

        }
    }
} 

要访问 Web 下的 所有(包括间接的)后代子站点,您可以在每个直接后代上递归地访问 .Webs 属性,但是从 SPSite 网站集对象的 .AllWebs 属性 开始会更直接。

.AllWebs 返回的 SPWebCollection 的 .WebsInfo 属性 为您提供 List<> 轻量级 SPWebInfo 对象。您可以使用这个轻量级集合来获取您关心的 Web 的筛选列表,而无需实例化和处理集合中的任何其他 SPWeb。

string webUrl = "/mysitecol/subweb/subweb";
using(SPSite site = new SPSite("http://myserver/mysitecol") 
{ 
    List<SPWebInfo> websInfo = site.AllWebs.WebsInfo.FindAll(
        delegate(WebsInfo webInfo)
        {
            // filter to get us only the webs that start with our desired URL
            return webInfo.ServerRelativeUrl.StartsWith(webUrl);
        }
    );
    foreach(SPWebInfo webInfo in websInfo)
    {
         using(SPWeb web = site.OpenWeb(webInfo.Id))
         {

         }
    }
}