void BuildSiteMapRecursive (XmlNode xmlNode, SiteMapNode parent)
{
if (xmlNode.Name != "siteMapNode")
throw new ConfigurationException ("incorrect element name", xmlNode);
string attrValue = GetNonEmptyOptionalAttribute (xmlNode, "provider");
if (attrValue != null) {
SiteMapProvider provider = SiteMap.Providers [attrValue];
if (provider == null)
throw new ProviderException ("Provider with name [" + attrValue + "] was not found.");
provider.ParentProvider = this;
SiteMapNode providerRoot = provider.GetRootNodeCore();
if (parent == null)
root = providerRoot;
else
AddNodeNoCheck (providerRoot, parent);
return;
}
attrValue = GetNonEmptyOptionalAttribute (xmlNode, "siteMapFile");
if (attrValue != null) {
var nvc = new NameValueCollection ();
nvc.Add ("siteMapFile", attrValue);
string description = GetOptionalAttribute (xmlNode, "description");
if (!String.IsNullOrEmpty (description))
nvc.Add ("description", description);
string name = MapUrl (attrValue);
var provider = new XmlSiteMapProvider ();
provider.Initialize (name, nvc);
SiteMapNode providerRoot = provider.GetRootNodeCore ();
if (parent == null)
root = providerRoot;
else
AddNodeNoCheck (providerRoot, parent);
return;
}
SiteMapNode curNode = ConvertToSiteMapNode (xmlNode);
if (parent == null)
root = curNode;
else
AddNodeNoCheck (curNode, parent);
XmlNodeList childNodes = xmlNode.ChildNodes;
if (childNodes == null || childNodes.Count < 1)
return;
foreach (XmlNode child in childNodes) {
if (child.NodeType != XmlNodeType.Element)
continue;
BuildSiteMapRecursive (child, curNode);
}
}