/// <summary> /// 将Xml节点转换成导航节点对象。 /// </summary> /// <param name="nav">所属Navigation。</param> /// <param name="node">Xml节点。</param> /// <param name="Parent">父导航节点。</param> /// <param name="children">子导航节点列表。</param> private void ConvertToNode(NavigationNode parent, XmlNode node, IBundle bundle) { // 获取Id、Name、Value、Order、Permisson、Icon和Tooltip属性。 string id = GetAttribute(node, "Id"); string name = GetAttribute(node, "Name"); if (string.IsNullOrEmpty(name)) { FileLogUtility.Warn("The Name attribute can not be empty for UIShell.NavigationService extension."); return; } string value = GetAttribute(node, "Value"); string order = GetAttribute(node, "Order"); float orderFloat = 0; float.TryParse(order, out orderFloat); string permission = GetAttribute(node, "Permission"); string icon = GetAttribute(node, "Icon"); string toolTip = GetAttribute(node, "Tooltip"); string parentId = GetAttribute(node, "ParentId"); // 创建导航节点。 var navNode = new NavigationNode { ParentId = string.IsNullOrEmpty(parentId) ? Guid.NewGuid().ToString() : parentId, Id = string.IsNullOrEmpty(id) ? Guid.NewGuid().ToString() : id, Name = name, Order = orderFloat, Value = value, Permission = permission, Icon = icon, ToolTip = toolTip, Bundle = bundle }; // 设置父节点,并添加到子节点列表。 if (!string.IsNullOrEmpty(parentId)) { PendingAppendedNodes.Add(navNode); } else if (string.IsNullOrEmpty(parentId)) { if (parent != null) { navNode.Parent = parent; parent.Children.Add(navNode); } else { navNode.Parent = null; navNode.ParentId = Guid.NewGuid().ToString(); NavigationNodeList.Add(navNode); } } // 将XML节点其它的属性保存到Attributes字典。 foreach (XmlAttribute attr in node.Attributes) { if (attr.Name.Equals("Id") || attr.Name.Equals("Name") || attr.Name.Equals("Value") || attr.Name.Equals("Order") || attr.Name.Equals("Permission") || attr.Name.Equals("Icon") || attr.Name.Equals("ToolTip")) { continue; } navNode.Attributes[attr.Name] = attr.Value; } // 遍历Xml子节点,并递归转换成导航节点。 foreach (XmlNode childnode in node.ChildNodes) { if (childnode is XmlComment) { continue; } ConvertToNode(navNode, childnode, bundle); } }