private static void AppendOrOverrideChild()

in src/TestFramework/Core/ConfigurationReader.cs [755:803]


        private static void AppendOrOverrideChild(XmlNode newFather, XmlNode fatherOfChildren, string name)
        {
            Dictionary<string, XmlNode> dict = new Dictionary<string, XmlNode>();
            string value = "";
            foreach (XmlNode child in fatherOfChildren.ChildNodes)
            {
                if (child.NodeType == XmlNodeType.Element)
                {
                    value = child.Attributes[name].Value;
                    try
                    {
                        dict.Add(value, child);
                    }
                    catch
                    {
                        throw new InvalidOperationException("Duplicate node with name \"" + name + "\"=\"" + value + "\" found.");
                    }
                }
            }

            foreach (XmlNode child in dict.Values)
            {
                bool duplicate = false;

                XmlNode old = null;
                foreach (XmlNode xn in newFather.ChildNodes)
                {
                    if (xn.NodeType != XmlNodeType.Element)
                        continue;

                    if (xn.Attributes[name].Value == child.Attributes[name].Value)
                    {
                        duplicate = true;
                        old = xn;
                        break;
                    }
                }
                if (duplicate)
                {
                    newFather.ReplaceChild(child.CloneNode(true), old);
                }
                else
                {
                    newFather.AppendChild(child.CloneNode(true));
                }
            }

            dict.Clear();
        }