我想在我现有的xml报告中添加一个根元素--testsuites。 我当前的报告看起来像这样
<?xml version="1.0" encoding="utf-8"?>
<testsuite name="classname" tests="9" failures="3" errors="6" time="2919"
disabled="0" skipped="0">
<testcase name="Setup1" time="5" classname="classname">
</testcase>
<testcase name="Setup2" time="49" classname="classname>
</testcase>
<testcase name="Setup23" time="357" classname="classname">
</testcase>
</testsuite>
我希望将其更改为
<?xml version="1.0" encoding="utf-8"?>
<testsuites>
<testsuite name="classname" tests="9" failures="3" errors="6" time="2919" disabled="0" skipped="0">
<testcase name="Setup1" time="5" classname="classname">
</testcase>
<testcase name="Setup2" time="49" classname="classname">
</testcase>
<testcase name="Setup23" time="357" classname="classname">
</testcase>
</testsuite>
</testsuites>
我目前对我不起作用
XmlDocument report = new XmlDocument();
report.Load(fileOfReport);
XmlElement root = report.CreateElement("root");
root.SetAttribute("testsuites","testsuites");
XmlElement child = report.CreateElement("child");
child.GetElementsByTagName("testsuite");
report.DocumentElement.AppendChild(root);
root.AppendChild(child);
report.Save(fileOfReport);
有人可以提供帮助吗?
答案 0 :(得分:3)
使用System.Linq.Xml
类可以更轻松地完成此操作:
var report = XDocument.Load(fullFileName);
var newdoc = new XDocument();
// Give it a root node called "testsuites"
newdoc.Add(new XElement("testsuites"));
// ...and add the other XML tree to that:
newdoc.Root.Add(report.Root);
newdoc.Save(fileOfReport);
优于XmlDocument
等的一个优点是,您无法从一个XmlDocument
获取元素并将它们放在另一个{@ 1}}中,但XDocument
并不介意所有当你这样做。递归复制整个XML文档的内容并不是你想要做的事情,没有充分的理由。
关于原始代码的其他一些观点:
这会在XML中创建一个名为&#34; root&#34;:<root />
的元素 - 而不是您想要的。
XmlElement root = report.CreateElement("root");
这会在<root />
上设置以下属性:
<root testsuites="testsuites" />
同样,不是你的想法。
当然,正如您现在所知,创建一个XML元素<child />
:
XmlElement child = report.CreateElement("child");
答案 1 :(得分:1)
您需要调用CreateElement来创建节点并附加所需的子节点。最后将新创建的节点附加到Document。
XmlDocument report = new XmlDocument();
report.Load(fileOfReport);
XmlElement root = report.CreateElement("testsuites");
var items = report.GetElementsByTagName("testsuite");
for (int i = 0; i < items.Count; i++)
{
root.AppendChild(items[i]);
}
report.AppendChild(root);
report.SaveAs(fileOfReport);