protected override void ProcessResource(ResourceTree aResourceTree) { System.Action <XElement, ResourceTreeNode> ReadChildren = null; var excludedGroups = new NodeGroup[] { NodeGroup.ExtensionPackages, NodeGroup.GameInformation, NodeGroup.GlobalGameSettings, NodeGroup.Invalid }; ReadChildren = (aBranch, aParent) => { foreach (var element in aBranch.Elements()) { if (element.Name == "Node") { aParent.Add(new ResourceTreeNode() { Name = element.Attribute("Name").Value, ID = int.Parse(element.Attribute("ID").Value), Type = NodeTypes.Child, Group = aParent.Group }); } else if (element.Name == "Group") { var node = new ResourceTreeNode() { Name = element.Attribute("Name").Value, Type = NodeTypes.Group, Group = aParent.Group }; ReadChildren(element, node); aParent.Add(node); } } }; var document = LoadXml(Filenames.Tree + ".xml"); if (document != null) { OnCategoryProcessing(ResourceTypes.ResourceTree); foreach (var node in aResourceTree) { if (!excludedGroups.Contains(node.Group)) { ReadChildren(document.Element(node.Group.ToString()), node); } } OnCategoryProcessed(ResourceTypes.ResourceTree); } }
protected override void ProcessResource( ResourceTree aResourceTree ) { System.Func<ResourceTreeNode, XElement, XElement> GetChildren = null; var excludedGroups = new NodeGroup[] { NodeGroup.ExtensionPackages, NodeGroup.GameInformation, NodeGroup.GlobalGameSettings, NodeGroup.Invalid }; GetChildren = ( aNode, aParent ) => { foreach ( var node in aNode ) { if ( node.Type == NodeTypes.Group ) aParent.Add( GetChildren( node, new XElement( "Group", new XAttribute( "Name", node.Name ) ) ) ); else aParent.Add( new XElement( "Node", new XAttribute( "Name", node.Name ), new XAttribute( "ID", node.ID ) ) ); } return aParent; }; var document = new XElement( "Tree", from node in aResourceTree where !excludedGroups.Contains( node.Group ) select GetChildren( node, new XElement( node.Group.ToString() ) ) ); SaveDocument( document, Filenames.Tree + ".xml" ); }