//Добавляе Item с модификаторами к Folder
 private void AddItemToFolder(IEnumerable<XElement> elements, IPublicComposite folder)
 {
     foreach (var xElement in elements)
     {
         if (xElement.Parent == null) continue;
         var item = new Item()
                    {
                        Id = ((XElement) xElement.PreviousNode.PreviousNode).Value,
                        IdFather = xElement.Parent.Descendants("IdItemName").First().Value,
                        Name = xElement.Value,
                        Price = ((XElement) xElement.PreviousNode).Value,
                        ParentComponent = folder
                    };
         var cc = ((XElement) xElement.PreviousNode.PreviousNode).Value;
         var pointer = GetElementAt(xElement, "Modifikators"); //Указатель на Modifikators
         //if (pointer == 0) continue;
         //Читаем модификаторы до упора, выходим по исключению
         try
         {
             while (xElement.Parent.Elements().ElementAt(pointer).Name == "Modifikators")
             {
                 item.Modifiers.Add(
                     xElement.Parent.Elements().ElementAt(pointer).Attributes("МодификаторИД").First().Value,
                     new Modifier(){
                         Name = xElement.Parent.Elements().ElementAt(pointer).Attributes("Модификатор").First().Value,
                         Select = false});
                 pointer++;
             }
         }
         catch
         {
         }
         folder.AddComponent(item);
     }
 }
 protected void AddFolderToFolder(IEnumerable<XElement> list, IPublicComposite folder)
 {
     foreach (var xElement in list)
         {
             var childrenfolder = new Folder()
                        {
                            Id = ((XElement) xElement.PreviousNode).Value,
                            IdFather = folder.Id,
                            Name = xElement.Value,
                            Price = "This folder!"
                        };
             folder.AddComponent(childrenfolder);
             GetChildren(((XElement)xElement).Value, childrenfolder);
         }
 }
 private bool GetChildren(string id, IPublicComposite folder)
 {
     var childmenu = _doc.Descendants("ItemName")
        .Where(z =>
               {
                   var xElement = z.Element("IdItemName");
                   return xElement != null && xElement.Value == id;
               });
     var elements = childmenu as IList<XElement> ?? childmenu.ToList();
     var itemName = elements.Elements("ItemName").Elements("Наименование");
     var rootDish = elements.Elements("ItemChildren").Elements("Наименование");
     //Добавляем блюдо Item к Folder
     AddItemToFolder(rootDish, folder);
     var enumerable = itemName as XElement[] ?? itemName.ToArray();
     //Если это Folder
     if (enumerable.Any()) AddFolderToFolder(enumerable, folder);
     return false;
 }
        private bool GetChildren(string item, IPublicComposite folder)
        {
            var rootElement =
                  _doc.Descendants("ItemChildren").Descendants("Наименование")
                     .Nodes().Where(z => z.ToString() == item);

            if (rootElement.Count() != 0)
            {
                return true;
            }

            var childmenu = _doc./*Elements("ButtonName").*/Descendants("ItemName").Where(z =>
            {
                var flag = false;
                foreach (var h in z.Descendants("Наименование").Nodes().Where(h => h.ToString() == item))
                {
                    flag = true;
                }
                return flag;
            });

            var xElements = childmenu as IList<XElement> ?? childmenu.ToList();
            var element = xElements.LastOrDefault();
            if (element == null) return false;
            //Папка
            var itemName = element.Elements("ItemName").Elements("Наименование");
            //Блюдо
            var rootDish = element.Elements("ItemChildren").Elements("Наименование");
            //Добавляем блюдо Item к Folder
            AddItemToFolder(rootDish, folder);
            var enumerable = itemName as XElement[] ?? itemName.ToArray();
            //Если это Folder
            if (enumerable.Any()) AddFolderToFolder(enumerable, folder);
            return false;
        }