Example #1
0
        //Открывает XML файл и создает структуру из содержимого
        public bool LoadStructureFromFile()
        {
            TagRoot = new TagItem("Root", null, null);
            StreamReader reader;

            try
            {
                reader = new StreamReader(filepath);
            }
            catch
            {
                return(false);
            }

            Regex tagRegEx   = new Regex("(<tag[^>]*>|</tag>)");
            Regex nameRegEx  = new Regex("(?<=name=\")\\w+(?=\")");
            Regex valueRegEx = new Regex("(?<=value=\")((\\d+(,\\d+)?)|True|False|None)(?=\")");
            Regex typeRegEx  = new Regex("(?<=type=\")(None|Bool|Int|Double)(?=\")");
            //Добавление новых элементов происходит относительно этого указателся
            TagItem cursor = Root;

            //Находим все открывающие и закрывающие теги и рассматриваем их по порядку
            foreach (Match hit in tagRegEx.Matches(reader.ReadToEnd()))
            {
                //Если тег закрывающий то это значит мы закончили добавлять детей в элемент структуры, на который ссылается указатель
                //указателем становится родитель этого элемета(движение вверх по дереву)
                if (hit.Value == "</tag>")
                {
                    cursor = cursor.Parent;
                }
                //Обрабатываем все теги кроме тега Root
                else if (hit.Value != "<tag name=\"Root\" type=\"None\">")
                {
                    //Верезаем значения из открывающего тега
                    string name  = nameRegEx.Match(hit.Value).Value;
                    string value = valueRegEx.Match(hit.Value).Value;
                    string type  = typeRegEx.Match(hit.Value).Value;

                    //В зависимости от типа добавляем новый элемент
                    //и указатель ссылается на этот элемент
                    switch (type)
                    {
                    case "None":
                        cursor = cursor.AddChild(name, null);
                        break;

                    case "Bool":
                        cursor = cursor.AddChild(name, bool.Parse(value));
                        break;

                    case "Int":
                        cursor = cursor.AddChild(name, int.Parse(value));
                        break;

                    case "Double":
                        cursor = cursor.AddChild(name, double.Parse(value));
                        break;

                    default:
                        throw new Exception("Неизвестный тип");
                    }
                }
            }
            reader.Close();
            return(true);
        }
Example #2
0
 static private void AddTagFormAddNone(MenuForm menu)
 {
     bufferItem.AddChild(bufferName, null);
     Controller.ChangeForm("Main");
     Controller.Form.Confirm = string.Format("Элемент '{0}' добавлен в структуру", bufferName);
 }