public ItemDish MenuXmlToList(XElement doc) { //Блюда лежащие в корне МЕНЮ var rootDish = doc.Elements("ButtonName").Elements("ItemName").Elements("ItemChildren") .Elements("Наименование"); //ПАПКИ с блюдами var rootMenu = doc.Elements("ButtonName").Elements("ItemName").Elements("ItemName") .Elements("Наименование"); //Добавляем корневые блюда AddDishToList(rootDish); //Добавляем папки и детей foreach (var p in rootMenu) { var item = new ItemDish { Price = "This folder!", Name = p.Value, Id = ((XElement)p.PreviousNode).Value }; Menu.Children.Add(item); GetChildren(((XElement)p).Value, doc); } return Menu; }
//Получаем "Наименование" из нижнего окна и ищем потомков private void GetChildren(string item, XElement doc) { //Вырезаем дерево с ВЕРШИНОЙ Item var childrens = doc.Elements("ButtonName").Elements("ItemName").Descendants("ItemName").Where(z => { var flag = false; foreach (var h in z.Descendants("Наименование").Nodes().Where(h => h.ToString() == item)) { flag = true; } return flag; }); //Добавляем блюда, не имеют детей var elements = childrens.Elements("ItemChildren").Elements("Наименование"); AddDishToList(elements); //Добавляем папки try { elements = childrens.Last().Elements("ItemName").Elements("Наименование"); //itemName - если есть папки - перебираем foreach (var p in elements) { var node = new ItemDish { Id = ((XElement)p.PreviousNode).Value, Name = p.Value, IdFather = "This folder!" }; Menu.Children.Add(node); GetChildren(p.Value, doc); //рекурсия } } catch (Exception) { } }
public MenuXml() { CurrentNode = new Stack<List<Item>>(); Menu = new ItemDish(); }
private void AddDishToList(IEnumerable<XElement> elements) { foreach (var p in elements) { var node = new ItemDish { Id = ((XElement)p.PreviousNode.PreviousNode).Value, Name = p.Value, Price = ((XElement)p.PreviousNode).Value, IdFather = p.Parent.Descendants("IdItemName").First().Value }; var pointer = GetElementAt(p, "Modifikators"); //Указатель на Modifikators try { while (p.Parent.Elements().ElementAt(pointer).Name == "Modifikators") { node.Modifikators.Add(p.Parent.Elements().ElementAt(pointer).Attributes("МодификаторИД").First().Value, p.Parent.Elements().ElementAt(pointer).Attributes("Модификатор").First().Value); pointer++; } } catch (Exception) { } Menu.Children.Add(node); } }