internal static HierarchyNode FindChildEx(HierarchyNode it, string name)
{
if (String.IsNullOrEmpty(name))
return null;
HierarchyNode result;
for (HierarchyNode child = it.FirstChild; child != null; child = child.NextSibling)
{
if (!String.IsNullOrEmpty(child.VirtualNodeName) && String.Compare(child.VirtualNodeName, name, StringComparison.OrdinalIgnoreCase) == 0)
return child;
if (String.Equals(child.Caption, name, StringComparison.OrdinalIgnoreCase))
return child;
// If it is a foldernode then it has a virtual name but we want to find folder nodes by the document moniker or url
else if ((String.IsNullOrEmpty(child.VirtualNodeName) || (child is FolderNode)) &&
(NativeMethods.IsSamePath(child.GetMkDocument(), name) || NativeMethods.IsSamePath(child.Url, name)))
{
return child;
}
result = FindChildEx(child, name);
if (result != null)
{
return result;
}
}
return null;
}