How to edit and save the abc.testsettings (xml) file in C #

I have a file with the content below. I want to delete the whole item in the DeploymentItem and create a new one.

<?xml version="1.0" encoding="UTF-8"?>
<TestSettings name="Settings" id="6f67be45-4967-40c3-a89f7665cc7f654e2" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
  <Description>These are default test settings for a local test run.</Description>
  <Deployment>
<DeploymentItem filename="TestCaseXml\LTestCases.xml" />
<DeploymentItem filename="..\..\Framework\Common\Xmls\TestSuite.xml" />
<DeploymentItem filename="TestCaseXml\bTestCases.xml" />
<DeploymentItem filename="TestCaseXml\PTestCases.xml" />
<DeploymentItem filename="TestCaseXml\1TestCases.xml" />
</Deployment>
</TestSettings>

      

when i use below code it gives me below output

XmlDocument doc2 = new XmlDocument();
            doc2.Load(testBinaryFile);
foreach (XmlNode node in doc2.DocumentElement.ChildNodes)
                {
                if (node.Name == "Deployment")
                {
                    node.RemoveAll();

                    foreach(string element in Folders)
                    {
                        if(!element.Contains("Scripts"))
                        {
                            string[] Files7 = Directory.GetFiles(element);
                            foreach(string File2 in Files7)
                            {
                                string addName = File2.Substring(File2.LastIndexOf(@"TestBinaries\")).Replace("TestBinaries\\", "");
                                XmlElement elem = doc2.CreateElement("DeploymentItem");
                                elem.InnerText = "filename='" +  addName + "'";
                                node.AppendChild(elem);
                            }

                        }
                        else
                        {
                            string addName = element.Substring(element.LastIndexOf("TestBinaries\\")).Replace("TestBinaries\\","") + "\\";
                            XmlElement elem = doc2.CreateElement("DeploymentItem");
                            elem.InnerText = @"filename='" + addName + "'";
                            node.AppendChild(elem);
                        }
                    }

                    doc2.Save(testBinaryFile);
                }   



<?xml version="1.0" encoding="UTF-8"?>
<TestSettings name="Settings" id="6f67be45-4967-40c3-a89f7665cc7f654e2" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
  <Description>These are default test settings for a local test run.</Description>
  <Deployment>
<DeploymentItem xmlns="">filename='Scripts\'</DeploymentItem>
<DeploymentItem xmlns="">filename='TestCaseXml\bTestCases.xml'</DeploymentItem>
<DeploymentItem xmlns="">filename='Xmls\TestSuite.xml'</DeploymentItem>
  </Deployment>
</TestSettings>

      

I need the output as shown below. please, help.

<?xml version="1.0" encoding="UTF-8"?>
<TestSettings name="Settings" id="6f67be45-4967-40c3-a89f7665cc7f654e2" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
  <Description>These are default test settings for a local test run.</Description>
  <Deployment>
<DeploymentItem filename='Scripts\' />
<DeploymentItem filename='TestCaseXml\bTestCases.xml' />
<DeploymentItem filename='Xmls\TestSuite.xml' />
  </Deployment>
</TestSettings>

      

+3


source to share


2 answers


Relatively xmlns=""

added to new elements because your XML has a default namespace. Note that in XML, descendant elements implicitly inherit the ancestor's default namespace, unless otherwise noted.

However, the pending release you posted DeploymentItem

are in the default namespace "http://microsoft.com/schemas/VisualStudio/TeamTest/2010"

.

You can use CreateElement()

overload
which take prefix, localName, namespaceURI parameters to create an item in the namespace. To be specific, try replacing this line:



XmlElement elem = doc2.CreateElement("DeploymentItem");

      

with this:

XmlElement elem = doc2.CreateElement(
                            string.Empty, 
                            "DeploymentItem", 
                            "http://microsoft.com/schemas/VisualStudio/TeamTest/2010"
                      );

      

+2


source


Try to run



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.IO;

namespace ConsoleApplication33
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = 
                "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                "<TestSettings name=\"Settings\" id=\"6f67be45-4967-40c3-a89f7665cc7f654e2\" xmlns=\"http://microsoft.com/schemas/VisualStudio/TeamTest/2010\">\n" +
                  "<Description>These are default test settings for a local test run.</Description>\n" +
                  "<Deployment>\n" +
                "<DeploymentItem filename=\"TestCaseXml\\LTestCases.xml\" />\n" +
                "<DeploymentItem filename=\"..\\..\\Framework\\Common\\Xmls\\TestSuite.xml\" />\n" +
                "<DeploymentItem filename=\"TestCaseXml\\bTestCases.xml\" />\n" +
                "<DeploymentItem filename=\"TestCaseXml\\PTestCases.xml\" />\n" +
                "<DeploymentItem filename=\"TestCaseXml\\1TestCases.xml\" />\n" +
                "</Deployment>\n" +
                "</TestSettings>\n";

            string defaultItems =
                "<DeploymentItem xmlns=\"\">filename='Scripts\'</DeploymentItem>\n" +
                "<DeploymentItem xmlns=\"\">filename='TestCaseXml\\TestCases.xml'</DeploymentItem>\n" +
                "<DeploymentItem xmlns=\"\">filename='Xmls\\TestSuite.xml'</DeploymentItem>\n";

            XmlDocument doc = new XmlDocument();
            doc.LoadXml(input);
            XmlNode deployment = doc.GetElementsByTagName("Deployment")[0];
            deployment.RemoveAll();
            deployment.InnerXml = defaultItems;


        }

    }
}

      

0


source







All Articles