private void MergeXmlDocument()

in src/TestFramework/Core/ConfigurationReader.cs [496:552]


        private void MergeXmlDocument(XmlDocument docBase, XmlDocument doc)
        {
            XmlNode root = docBase.DocumentElement;

            //Create an XmlNamespaceManager for resolving namespaces.
            XmlNamespaceManager nsmgr = new XmlNamespaceManager(docBase.NameTable);
            nsmgr.AddNamespace("tc", DefaultNamespace);

            XmlNode baseNode = root.SelectSingleNode("tc:TestRun", nsmgr);
            XmlNode node = doc.DocumentElement.SelectSingleNode("tc:TestRun", nsmgr);
            if (node != null)
            {
                if (baseNode == null)
                {
                    root.InsertBefore(
                        docBase.ImportNode(node, true).CloneNode(true),
                        root.SelectSingleNode("tc:Properties", nsmgr));
                }
                else
                {
                    root.ReplaceChild(docBase.ImportNode(node, true).CloneNode(true), baseNode);
                }
            }

            baseNode = root.SelectSingleNode("tc:Properties", nsmgr);
            node = doc.DocumentElement.SelectSingleNode("tc:Properties", nsmgr);
            MergePropertyAndGroup(baseNode, docBase.ImportNode(node, true), "name");

            node = doc.DocumentElement.SelectSingleNode("tc:Adapters", nsmgr);
            if (node != null)
            {
                baseNode = root.SelectSingleNode("tc:Adapters", nsmgr);
                AppendOrOverrideChild(baseNode, docBase.ImportNode(node, true), "name");
            }

            node = doc.DocumentElement.SelectSingleNode("tc:TestLog", nsmgr);
            if (node != null)
            {
                baseNode = root.SelectSingleNode("tc:TestLog", nsmgr);
                baseNode.Attributes["defaultprofile"].Value =
                    node.Attributes["defaultprofile"].Value;
            }

            node = doc.DocumentElement.SelectSingleNode("tc:TestLog/tc:Sinks", nsmgr);
            if (node != null)
            {
                baseNode = root.SelectSingleNode("tc:TestLog/tc:Sinks", nsmgr);
                AppendOrOverrideChild(baseNode, docBase.ImportNode(node, true), "id");
            }

            node = doc.DocumentElement.SelectSingleNode("tc:TestLog/tc:Profiles", nsmgr);
            if (node != null)
            {
                baseNode = root.SelectSingleNode("tc:TestLog/tc:Profiles", nsmgr);
                AppendOrOverrideChild(baseNode, docBase.ImportNode(node, true), "name");
            }
        }