2017-05-30 14 views
2

ルート要素--testsuitesを既存のxmlレポートに追加します。 私の現在のレポートは、私はそれが私の現在の私XmlDocumentを使用してxmlにルート要素を追加するC#

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

上では動作しません

<?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> 

に変更したいこの

<?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> 

のように見え、誰が助けることができますか?

+2

Internet ExplorerからXMLソースコードをコピーしないでください。処理しているXMLファイルからXMLソースコードをコピーします。 – Tomalak

+0

私はXML分野の新人です。これについてもっと説明できますか?あなたはxmlのソースコードをファイルに変換すべきだと言っていますか? –

+1

いいえ、XMLファイルを開いたときにInternet Explorerに表示される対話形式のプレビューをコピーして貼り付けないでください。それは余分な文字を含んでいるので役に立たない。テキストエディタでXMLファイルを開きます。 – Tomalak

答えて

1

を。最後に、新しく作成したノードをドキュメントに追加します。

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); 
+0

ありがとう、Gowri。これは、負荷の代わりに保存する最後の行を変更した後でなければ、私にとってはうまくいきます。 –

3

これはSystem.Linq.Xmlクラスを使用して、より簡単に行うことができます。XmlDocumentなどの上に

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

一つの利点は、あなたが1 XmlDocumentから要素を取り、右の他にそれらを置くことができないということですが、XDocumentは」doesnのあなたがそれをするときには全く気にしないでください。 XML文書全体の内容を再帰的にコピーすることは、正当な理由なしにやりたいことではありません。

他のいくつかの点

は、あなたの元のコードについて:

これは、「ルート」という名前の要素を作成します。XMLで<root /> - あなたが望まないものを。

XmlElement root = report.CreateElement("root"); 

これは<root />に次の属性を設定します。

<root testsuites="testsuites" /> 

を再度、あなたは念頭に置いていたではないものを。

そして、これはもちろん、あなたが今知っているように、XML要素 <child />作成します:あなたが必要なチャイルズのノードを作成して追加するのcreateElementを呼び出す必要が

XmlElement child = report.CreateElement("child"); 
+0

ありがとうEdを追加する方法を手伝ってください。それは非常に有用です。しかし、私の現在の環境では、私はLinqライブラリを使用することはできません、そうでなければ、それは私にとって素晴らしいでしょう。私はあなたから多くを学んだ。ありがとう –

+0

@ JiangJialiそれは起こることができます。良い事Gowriは 'XmlDocument'でそれを理解するのに苦労しました。 –

関連する問題