// ######## Find... internal static IConfigurationGroup FindGroup(IConfigurationGroup searchGroup, string groupKey, char groupNameSeparator) { var gk = groupKey; if (!gk.Contains(groupNameSeparator)) { // check for existing group var foundExisting = searchGroup.FirstOrDefault(x => { return(x.Key == gk); }); if (foundExisting != null) { return(foundExisting); } else { var newGroup = new ConfigurationGroup(groupKey); searchGroup.Add(newGroup); return(newGroup); } } else { var parts = gk.Split(groupNameSeparator); gk = parts[0]; // ---- var subGroup = FindSubGroup(searchGroup, gk); if (subGroup != null) { var dd = groupKey.Substring(groupKey.IndexOf(groupNameSeparator) + 1); var group = FindGroup(subGroup, dd, groupNameSeparator); return(group); } } return(FindSubGroup(searchGroup, gk)); }
internal static IConfigurationGroup FindSubGroup(IConfigurationGroup group, string itemKey) { foreach (var item in group) { if (item.Key == itemKey) { return(item); } } var newGroup = new ConfigurationGroup(itemKey); group.Add(newGroup); return(newGroup); }
// -------- private void ProcessGroup(XmlReader xr, IConfigurationGroup rootGroup, IConfigurationGroup currentGroup) { while (xr.Read()) { if (xr.IsStartElement(_XmlElementGroupItemsName_)) { while (xr.Read()) { if (xr.IsStartElement(_XmlElementItemName_)) { currentGroup.Items.Add(ProcessItemSegment(xr)); } else { break; } } } else if (xr.IsStartElement(_XmlElementGroupsName_)) { while (xr.Read()) { if (xr.IsStartElement(_XmlElementGroupName_)) { var key = xr.GetAttribute(_XmlElementGroupKeyName_); if (xr.IsEmptyElement) { currentGroup.Add(key); } else { ProcessGroup(xr, rootGroup, ConfigurationShared.FindGroup(currentGroup, key, _XmlElementGroupKeyNameSeparator_)); } } else { break; } } } else { break; } } }