Ejemplo n.º 1
0
        // ######## 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));
        }
Ejemplo n.º 2
0
        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;
         }
     }
 }