//Читання схеми фізично public static List <GroupAbstract> ReadScheme(string schemePath) { List <GroupAbstract> groupsAbstractions = new List <GroupAbstract>(); string[] lines = File.ReadAllLines(schemePath, Encoding.Default); GroupAbstract lastGroup = null; int dividerCounter = 1; foreach (string line in lines) { if (!line.Contains("#") && line != "") { if (line.Contains("-group")) { GroupAbstract group = new GroupAbstract(line); groupsAbstractions.Add(group); lastGroup = group; } else if (line.Contains("-single") && lastGroup != null) { SingleTagAbstract tag = new SingleTagAbstract(line); lastGroup.tagsInGroup.Add(tag); } else if (line.Contains("-multiple") && lastGroup != null) { MultipleTagAbstract tagInfo = new MultipleTagAbstract(line); lastGroup.tagsInGroup.Add(tagInfo); } else if (line.Contains("-divider") && lastGroup != null) { DividerTagAbstract divider = new DividerTagAbstract(line, dividerCounter); lastGroup.tagsInGroup.Add(divider); dividerCounter++; } else { throw new Exception("Помилка в схемі зчитування XML файлу (група тегів має бути перед тегами)"); } } else { continue; } } //xmlObj = new XmlInfo(); //xmlObj.tagGroups.AddRange(groupsInfo); return(groupsAbstractions); }
XmlInfo FillGroups(SchemeInfo scheme) { XmlInfo xmlInfo = new XmlInfo(); List <GroupInfo> groupsInfo = new List <GroupInfo>(); for (int i = 0; i < scheme.groupsAbstractions.Count; i++) { GroupInfo gi = new GroupInfo(scheme.groupsAbstractions[i].groupParameters); for (int j = 0; j < scheme.groupsAbstractions[i].tagsInGroup.Count; j++) { if (scheme.groupsAbstractions[i].tagsInGroup[j] is SingleTagAbstract) { SingleTagAbstract sta = scheme.groupsAbstractions[i].tagsInGroup[j] as SingleTagAbstract; TagSingleInfo tsi = new TagSingleInfo(sta.tagParameters); tsi.xmlDoc = xmlFile; gi.elements.Add(tsi); } else if (scheme.groupsAbstractions[i].tagsInGroup[j] is MultipleTagAbstract) { MultipleTagAbstract mta = scheme.groupsAbstractions[i].tagsInGroup[j] as MultipleTagAbstract; TagMultipleInfo tmi = new TagMultipleInfo(mta.tagParameters); tmi.xmlDoc = xmlFile; gi.elements.Add(tmi); } else if (scheme.groupsAbstractions[i].tagsInGroup[j] is DividerTagAbstract) { DividerTagAbstract dta = scheme.groupsAbstractions[i].tagsInGroup[j] as DividerTagAbstract; TagDivider td = new TagDivider(dta.tagParameters, dta.counter); gi.elements.Add(td); } else { throw new Exception("Помилка в побудові обїектної моделі Xml файлу"); } } groupsInfo.Add(gi); } xmlInfo.tagGroups.AddRange(groupsInfo); return(xmlInfo); }