使用XmlDocument C#

时间:2017-05-30 18:47:54

标签: c# xml

我想在我现有的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);

有人可以提供帮助吗?

2 个答案:

答案 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);