public static void GetTreeRecursive(ManagedObjectNode parent, List <ManagedObject> mObjects, int level) { var groups = mObjects.GroupBy(x => x.hierachy[level]).ToList(); if (groups.Count() > 0) { foreach (var group in groups) { ManagedObjectNode newNode = new ManagedObjectNode(); if (parent.children == null) { parent.children = new Dictionary <string, ManagedObjectNode>(); } parent.children.Add(group.Key, newNode); if (level < maxLevels - 1) { GetTreeRecursive(newNode, group.ToList(), level + 1); } else { newNode.leaves = mObjects; } } } }
static void Main(string[] args) { XmlReader reader = XmlReader.Create(FILENAME); while (!reader.EOF) { if (reader.Name != "managedObject") { reader.ReadToFollowing("managedObject"); } if (!reader.EOF) { XElement managedObject = (XElement)XElement.ReadFrom(reader); ManagedObject newObject = new ManagedObject(); ManagedObject.objects.Add(newObject); newObject.mClass = (string)managedObject.Attribute("class"); newObject.distName = (string)managedObject.Attribute("distName"); newObject.hierachy = newObject.distName.Split(new char[] { '/' }); newObject.objectdict = managedObject.Elements() .GroupBy(x => (string)x.Attribute("name"), y => (string)y) .ToDictionary(x => x.Key, y => y.FirstOrDefault()); } } ManagedObjectNode.CreateTree(); }
public static void GetTreeRecursive(ManagedObjectNode parent, List <ManagedObject> mObjects, int level) { var groups = mObjects.GroupBy(x => x.hierachy[level]).ToList(); foreach (var group in groups) { ManagedObjectNode newNode = new ManagedObjectNode(); if (parent.children == null) { parent.children = new Dictionary <string, ManagedObjectNode>(); } parent.children.Add(group.Key, newNode); newNode.leaves = mObjects.Where(x => x.hierachy.Count() - 1 == level).ToList(); List <ManagedObject> hasChildren = mObjects.Where(x => x.hierachy.Count() - 1 > level).ToList(); if (hasChildren.Count() > 0) { GetTreeRecursive(newNode, hasChildren, level + 1); } } }