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>
source to share
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"
);
source to share
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;
}
}
}
source to share