2015-11-03 103 views
0

我正在嘗試構建一個自動測試分級應用程序,並且希望最終結果爲允許分級人員將新xml文件保存到任何位置的savefiledialog提示。使用C#中另一個XML文檔中的元素附加XML文檔

訣竅是我需要輸出xml以包含原答案+答案+最終成績的附加答案。這是我到目前爲止,但我得到一個錯誤。我不熟悉.appendchild(),所以我認爲這是我的問題所在。

private void cbOutput_Click(object sender, EventArgs e) 
    { 
     XmlNode rootTest = xmlAnswers.DocumentElement; 
     XmlNode rootKey = xmlAnswerKey.DocumentElement; 

     XmlNodeList nodeListTest = rootTest.SelectNodes("//answer"); 

     foreach (XmlNode item in nodeListTest) 
     { 
      XmlNode importNode = rootTest.OwnerDocument.ImportNode(rootKey, true); 

      item.AppendChild(importNode); 
     } 

     SaveFileDialog savefiledialog1 = new SaveFileDialog(); 
     saveFileDialog1.Filter = "XML Files|*.XML"; 
     saveFileDialog1.Title = "Choose Location to Save Graded Test"; 

     if (saveFileDialog1.ShowDialog() == DialogResult.OK) 
     { 
      if (!string.IsNullOrEmpty(savefiledialog1.FileName)) 
      using (Stream s = File.Open(savefiledialog1.FileName, FileMode.Create)) 
      using (StreamWriter sw = new StreamWriter(s)) 
      { 
       sw.Write(rootTest + tbTotal.Text); 
      } 
     } 
+1

可能的重複[錯誤:「要插入的節點來自不同的文檔上下文」](http://stackoverflow.com/questions/3019136/error-the-node-to-be-inserted-is- from-a-different-document-context) –

+0

這有助於獲得該錯誤。現在,當我運行並通過測試時,我得不到輸出,這意味着文件不會保存在任何地方。我已經更新了我的代碼 –

回答

0

因爲是.Net 3.5 XML代碼,所以我很難跟着你的代碼。當3.5出來時,我開始使用C#。好像你正在爲測試中的每個答案添加密鑰?從你寫的描述中沒有意義。但如果這是你的目標,你可以試試這個。

如果你可以使用的.Net 3.5,然後使用XElement/XDocument,用these converters

XElement test = xmlAnswers.ToXElement(); 
XElement keys = xmlAnswerKey.ToXElement(); 

test.Descendants("answer") 
    .ToList() 
    .ForEach(a => a.Add(new XElement(keys))); // Add clone of keys to each answer 
// Dialog stuff 
test.Save(savefiledialog1.FileName); 

或者,使用說明(我不得不開始嘗試做了你應該做的事情,因爲你的XML對我們來說是隱藏的)。

XElement test = xmlAnswers.ToXElement(); 
XElement keys = xmlAnswerKey.ToXElement(); 

test.Add(keys.Descendants("answer").ToList()); // Add Answers to test 
test.Add(new XElement("finalgrade", "A")); // Add final grade 
// Dialog stuff 
test.Save(savefiledialog1.FileName); 

PS,不要做所有的轉換中,

if (saveFileDialog1.ShowDialog() == DialogResult.OK) 

外面加答案等,否則,如果它不是那麼OK你是在浪費用戶的時間。

+0

謝謝查克。我試圖從答案中提取答案並將它們附加到測試xml本質上。這是我的接聽鍵: \t \t \t \t \t \t 15% \t \t \t 一個 \t \t

+0

@BrandonMR然後我寫的第二部分可能爲你工作,如果你的'TestKey'在你的'xmlAnswerKey'變量中。如果不是這樣,您可能需要用兩個文件的示例XML來調整您的帖子,以便我們能夠更好地爲您提供幫助。 –

+0

@BrandonMR還添加了一個最終XML應該是什麼樣子的例子。 –